반응형

/*********************************************************************************************************
-- Title : [R3.3] 제어문(if) 및 반복문(for)
-- Reference : hrd-net
-- Key word : R if else ifelse switch which for while repeat continue break

*********************************************************************************************************/

-- R

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
  
# ********************************************
# -- if 조건문  
# ********************************************
 
= 10
= 5
= x * y
z
 
# -- if ~ else 문
if(x*> 40)
{
    cat("x*y의 결과는 40 이상입니다.\n")         # \n 줄바꿈
    cat("x*y =", z)
else                                           # } 뒤에 else 안쓰면 에러 
{
    cat("x*y의 결과는 40 미만입니다. x*y =", z,"\n")
}
 
# -- if ~ else if 문 
score = scan()
score                                            # 85
 
if (score >= 90)
{
    result="A학점"                               # 조건식1 참인 경우 
else if(score >=80)
{
    result="B학점"                               # 조건식1 거짓, 조건식2 참 
else if(score >=70)
    result="C학점"
else if(score >=60)
{
    result="D학점"
else
{
    result="F학점"
}  
 
cat("당신의 학점은 ",result) 
 
print(result) 
 
# -- 주민번호 이용 -> 성별 판별 
install.packages("stringr")
library(stringr)
 
jumin = "123456-5234567"
gender = str_sub(jumin,8,8)
 
if (gender == "1" || gender == "3")
{
    cat('당신은 남자입니다.')
}else if(gender == "2" || gender == "4")
{
    cat('당신은 여자입니다.')
else
{
    cat('주민번호 양식이 틀립니다.')
}
 
# -- ifelse 문 
#    vector -> vector 
score = c(85709465)                        # vector 
result = ifelse(score>=80"우수","노력")        #우수
result                                           # "우수" "노력" "우수" "노력"
 
# -- ifelse 문 응용 
excel =read.csv("D:\\RProject\\Rwork\\Part-I\\excel.csv", header = T)
excel
str(excel)
head(excel)
q5 = excel$q5
 
q1 = excel$q1 # q1 변수값 추출
q1
mode(q1)
str(q1)
class(q1)
 
ifelse(q1>=4, sqrt(q1),q1)                       # 4보다 큰 경우 sqrt()적용
ifelse(q1>=2 & q1<=4, q1^2, q1)                  # 1과 5만 출력, 나머지(2~4) 지수승
 
 
# ********************************************
# -- switch 조건문  
#    switch(비교구문, 실행구문1, 실행구문2, 실행구문3)
# ********************************************
switch(2,"red","green","blue")
switch(1,"red","green","blue")
 
switch(4,"red","green","blue")
switch(0,"red","green","blue")
 
switch("color""color" = "red""shape" = "square""length" = 5)
 
 
# ********************************************
# -- which 조건문  
#    which()의 괄호내의 조건에 해당하는 위치(인덱스)를 출력
# ********************************************
name = c("kim","lee","choi","park")
name
 
which(name=="choi"
 
# -- 데이터프레임에서 확인
no = c(1:5)
name =c("홍길동","이순신","강감찬","유관순","김유신")
score = c(85,78,89,90,74)
 
exam = data.frame(학번=no,이름=name,성적=score)
exam
 
which(exam$이름=="유관순")
 
 
# ********************************************
# -- for 반복문 
# ********************************************
name = c("kim""lee"'kang')
cnt = 1
 
for (n in name)
    print(cnt)    # 반복 횟수 
    print(n)
    cnt = cnt + 1 # 카운터 변수 
}
 
= c(1:10)
 
for (n in i)
{
    print(n * 10)            # 계산식(numeric만 가능) 출력
    print(n)
}
 
for(n in i)
{
    if(n%%2==0print(n)     # %% : 나머지값 - 짝수만 출력
 
for (n in i)
{
    if (n%%2==0)
    {
        next                 # 짝수면 skip
    }else
    {
        print(n) 
    }    
 
 
# ********************************************
# -- while 반복문 
# ********************************************
= 0 
 
while (i < 10)
{
    i = i + 1 
    print(i)
}
 
cnt = 1
 
repeat
{
    print(cnt)
    cnt = cnt + 2 
    if(cnt>15) break         # cnt가 15보다 크면 탈출
}

cs

반응형

+ Recent posts