在条件执行结构中, 一条或一组语句仅在满足一个指定条件时执行。 R中的条件执行结构包括if-else
、 ifelse
和switch
。
分别进行说明。
if-else 结构
if-else
结构在某个给定的条件为真时执行语句。也可以在条件为假时执行其他的语句。语法为:
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 结构
ifelse
结构是if-else
结构比较紧凑的向量化版本, 其语法为:
ifelse(cond, statement1, statement2)
statement1
是cond
条件为真时执行的语句,statement2
是cond
条件为假时执行的语句。
> 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 结构
switch
根据一个表达式的值选择语句执行。 语法为:
switch(expr, ...)
直接引用书中的例子吧,能够很典型地说明switch
函数的用法。
> 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"