高级编程--控制结构(for循环、if()和else、ifelse())


高级编程--控制结构

R解释器运行代码时,它按顺序逐行读取。如果一行不是一个完整的语句,它会读取附加行直到可以构造一个完全的语句。例如,如果你想计算3+2+5的和,可以运行代码:

 3 + 2 + 5

 

也可以运行下列代码:

 3 + 2 +

 5

 

#第一行末尾的+号表示语句不是完整的。

你想有条件的或是重复地执行一个或多个语句很多次。这一部分描述了三个控制流函数,这几个函数在书写函数中是十分有用的:for()if()ifelse()

1. for循环

for()函数允许你重复执行语句。语法是:

for(var in seq){

 statements

}

其中var是一个变量名,seq是计算向量的表达式。如果仅有一个语句,那么花括号是可省略的:

 for(i in 1:5) print(1:i)

 

for(i in 5:1)print(1:i)

 

# var直到函数退出才退出。退出时,i1

2. if()else

if()函数允许你有条件地执行语句。if()结构的语法是:

if(condition){

 statements

} else {

 statements

}

运行的条件是一元逻辑向量(TRUEFALSE)并且不能有缺失(NA)。else部分是可选的。如果仅有一个语句,花括号也是可以省略的。

下面的代码片段是一个例子:

x<-c(1,3,5,7,8)

y<-c(20,23,37,48,59)

if(interactive()){

  plot(x, y)

} else {

  png("myplot.png")

  plot(x, y)

  dev.off()

}

如果代码交互运行,interactive()函数返回TRUE,同时输出一个曲线图。否则,曲线图被存在磁盘里。

 

3. ifelse()

ifelse()是函数if()的量化版本。矢量化允许一个函数来处理没有明确循环的对象。ifelse()的格式是:

ifelse(test, yes, no)

其中test是已强制为逻辑模式的对象,yes返回test元素为真时的值,no返回test元素为假时的值。

比如你有一个p值向量,是从包含六个统计检验的统计分析中提取出来的,并且你想要标记p<0.05水平下的显著性检验。可以使用下面的代码:

pvalues <- c(.0867, .0018, .0054, .1572, .0183, .5386)

results <- ifelse(pvalues <.05, "Significant", "Not Significant")

results

 

同样的结果可以使用显式循环完成,很明显向量化的版本更快且更有效:

pvalues <- c(.0867, .0018, .0054, .1572, .0183, .5386)

results <- vector(mode="character", length=length(pvalues))

for(i in 1:length(pvalues)){

 if (pvalues[i] < .05) results[i] <- "Significant"

 else results[i] <- "Not Significant"

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM