一.条件语句
1.if(){ } else{ }
(1)只有if没有else,那么条件是FALSE时就什么都不做
i = -1
if (i<0) print('up')
if (i>0) print('up')
#理解下面代码
if(!require(tidyr)) install.packages('tidyr')
(2)有else
i =1
if (i>0){
cat('+')
} else {
print("-")
}
2.ifelse函数可处理向量
#单个数值
i=-1
ifelse(i>0,"+","-")
#向量
x=rnorm(10)
x
y=ifelse(x>0,"+","-")
y
#多个条件
i = 0
if (i>0){
print('+')
} else if (i==0) {
print('0')
} else if (i< 0){
print('-')
}
i
ifelse(i>0,"+",ifelse((i<0),"-","0"))
二.循环语句
1.for循环函数
x可以是向量,数据框,列表等。x的长度为几,循环就会进行多少次。
#**顺便看一下next和break**
x <- c(5,6,0,3)
s=0
for (i in x){
s=s+i
#if(i == 0) next 如果i=0,则直接跳过当前(0),到下一个循环(3)
#if (i == 0) break 如果i=0,则中断循环
print(c(which(x==i),i,1/i,s))
}
#优化代码-推荐
x <- c(5,6,0,3)
s = 0
for (i in 1:length(x)){
s=s+x[[i]] #x向量取子集,建议用两个[],避免出现奇怪报错
#if(i == 3) next
#if (i == 3) break
print(c(i,x[[i]],1/x[[i]],s))
}
#如何将结果存下来?
x
s = 0
result = list()
for(i in 1:length(x)){
s=s+x[[i]]
result[[i]] = c(i,x[[i]],1/x[[i]],s)
}
result
#将列表变成矩阵,将列表里每个子集进行连接
do.call(cbind,result)
-----------------------------练习---------------------------------
#1.使用循环,查看"a",TRUE和3的数据类型
x = list("a",TRUE,3)
for(i in 1:length(x)){
print(class(x[[i]]))
}
#1.使用循环,对iris的1到4列分别画点图(plot)
opar<-par(no.readonly = TRUE)
par(mfrow = c(2,2))
for(i in 1:4){
plot(iris[,i],col = iris[,5])
}
par(opar)
①if函数
②else if函数
③for函数
④while函数
⑤repeat函数
参考资料:生信技能树-小洁老师
网友评论