if...else语句的两种写法
法一
if(条件1){
表达式1
} else if(条件2){
表达式2
} else {
表达式3
}
法二:
注意写条件语句时,条件中的元素仍然只为一个。如果输入的变量中有多个元素时,如向量,则R会处理第一个元素。
x = c(6:-4)
In if (x < 10) { : 条件的长度大于一,因此只能用其第一元素
总之,个人认为条件语句的用法与py中无区别。
而对于ifelse()函数,返回的是与输入的test中的变量(可以是单个元素,也可以是向量)相同形状的值。值的确定由test的条件判断确定。总之,理解这个函数仔细阅读上图的函数说明。
应用一:负数开平方会产生NAN值——解决方式:将负数值提前替换成NA
> x = c(6:-4)
> sqrt(ifelse(x>=0,x,NA))
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA NA
[10] NA NA
应用二:ifelse()函数嵌套--将向量size中size <=0.2的替换成为Small,0.2< size <=0.8 Medium size >0.8 Large
> size <- c(0.05, 0.6, 0.3, 0.9)
#法一:
> for(i in x){
+ if(i <= 0.2){
+ cat("Small\n")
+ } else if(i <= 0.8){
+ cat("Medium\n")
+ } else {
+ cat("Large\n")
+ }
+ }
Small
Medium
Medium
Large
#法二:
>ifelse(size<=0.2,"Small",ifelse(size<=0.8,"Medium","Large"))
[1] "Small" "Medium" "Medium" "Large"
应用三:绘图函数plot中,有时需要给不同的元素附上颜色,可以用ifelse()
> a
height weight gender
tom 180 75 male
cindy 165 58 female
jimmy 175 72 male
sam 173 68 male
lucy 160 60 female
lily 165 55 female
> color=ifelse(a$gender=="male","blue","red")
> color
[1] "blue" "red" "blue" "blue" "red" "red"
> plot(a$height,col=color)#col参数需要传入一个向量
for/while循环:
用for循环和while循环打印如下信息:
[1] 1
[1] 1 2
[1] 1 2 3
[1] 1 2 3 4
[1] 1 2 3 4 5
#for循环
for (i in 1:5) print (1:i)
#while循环
i=1
while(i<=5){
print(1:i)
i=i+1
}
for循环应用
genelist=c("TP53","EGFR","TGFB","MSH2","PTEN")
for(gene in genelist){
filename=paste(gene,".pdf",sep="")
cat(filename,"\n")
}