在條件執(zhí)行結(jié)構(gòu)中, 一條或一組語句僅在滿足一個指定條件時執(zhí)行。 R中的條件執(zhí)行結(jié)構(gòu)包括if-else 、 ifelse 和switch 。
分別進行說明。
if-else 結(jié)構(gòu)
if-else 結(jié)構(gòu)在某個給定的條件為真時執(zhí)行語句。也可以在條件為假時執(zhí)行其他的語句。語法為:
if (cond) statement
if (cond) statement1 else statement2
試舉一例:
> wd <- "high"
> if(is.character(wd)) grade <- as.factor(wd) else print("wd is not character.")
> wd
[1] "high"
> wd <- 1
> if(is.character(wd)) grade <- as.factor(wd) else print("wd is not character.")
[1] "wd is not character."
如果后面的語句占用多行,則可以加上大括號。
> wd <- 1
> if(is.character(wd)) {
+ grade <- as.factor(wd) } else {
+ print("wd is not character.") }
[1] "wd is not character."
ifelse 結(jié)構(gòu)
ifelse 結(jié)構(gòu)是if-else結(jié)構(gòu)比較緊湊的向量化版本, 其語法為:
ifelse(cond, statement1, statement2)
statement1是cond條件為真時執(zhí)行的語句,statement2是cond條件為假時執(zhí)行的語句。
> dt <- NULL
> dt$pvalue <- c(0.05, 0.07, 0.12, 0.15)
> dt$change <- ifelse(dt$pvalue >= 0.1, "High", "Down")
> dt
$pvalue
[1] 0.05 0.07 0.12 0.15
$change
[1] "Down" "Down" "High" "High"
輸出為向量。
上面的例子解釋一下,條件是pvalue是否大于等于0.1,如果為真時change值為High,為假時change值為Down。
switch 結(jié)構(gòu)
switch根據(jù)一個表達式的值選擇語句執(zhí)行。 語法為:
switch(expr, ...)
直接引用書中的例子吧,能夠很典型地說明switch函數(shù)的用法。
> feelings <- c("sad", "afraid")
> for (i in feelings)
+ print(
+ switch(i,
+ happy = "I am glad you are happy",
+ afraid = "There is nothing to fear",
+ sad = "Cheer up",
+ angry = "Calm down now"
+ )
+ )
[1] "Cheer up"
[1] "There is nothing to fear"