高級編程--控制結構(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