월요일
if~else / ifelse
- if~else / ifelse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
x <- 1:5 y <- -2:2 if(any(x<0)) print(x) if (any(y<0)) { print(abs(y)) cat("\n y contains negative values") } x <- 1:5 if(length(x)==5) { if (sum(x)==15) { cat("\n Vector x length=",length(x),", sum = ",sum(x)) }else { cat("\n Vector x length !=",length(x)) } } x = c(10,3,6,9) y=c(1,5,4,12) ifelse(x>y,x,y) score = c(80,75,40,98) grade=ifelse(score >= 50,"pass","fail") data.frame(score,grade)
그냥 단순한 조건문이다. 자세한 설명은 다른 언어들의 if문과 동일하므로 생략.
이때 조금 특이한 조건문이 하나가 있다. 바로 ifelse문인데 이 조건문은 논리벡터에 적용이 되는 조건문이다. 함수의 기본입력 형식은
ifelse(condition, true ouput, false output)
의 형태이다. 약간 느낌은 삼항연산자와 비슷하게 보면 될 듯하다.
switch
- switch
1 2 3 4 5
x<-c(1,3,2,5,2) i <- 2 switch (i,mean(x),median(x),sd(x),var(x)) type <- "mean" switch(type, mean=mean(x),sd=sd(x),var=var(x))
보통 C++에서 쓰는 switch case문과 유사하다. 좀 다른 점이라면 해당 case에 들어가는 것이 한줄의 코드에 다 들어간다는 점이다. 함수 기본입력 형식은
switch(function index,func1,func2,...)
이다.
목요일
for statement
- for statement
1 2 3 4 5 6
for (i in 1:(nfile-1)) { idx = (cut * (i - 1) + 1):(cut * i) write.table(dat[idx,], file = paste0(f_pre, i, f_post), sep = '\t') } idx = (cut * i + 1):n write.table(dat[idx,], file = paste0(f_pre,i + 1, f_post), sep = '\t')
일반적인 loop statement이다. 반복문의 형태는 시작값:끝값의 형태로 입력해주면 된다,. 위의 코드는 특정 파일을 10개씩 잘라서 데이터에 저장하는 반복문 코드이다.
while statement
- for statement
1 2 3 4 5 6 7 8 9
ch = c("A/B/C/D/F", "A/AA", "BB/B", "Quit", "CC/C") xp = list() i = 1 while (ch[i] != "Quit" & i <= length(ch)) { xp[[i]] = unlist(strsplit(ch[i],'/')) print(xp[[i]]) i = i + 1 } table(unlist(xp))
일반적인 while문과 동일하다. 설명은 생략…
Comments powered by Disqus.