一个非常简单的if ... else语句会产生意外结果

时间:2017-06-16 09:07:51

标签: r

我在RStudio中创建了一个非常简单的if ... else语句,我遇到了以下问题。如果你能花点时间看看这个,我将不胜感激: -

(A)代码: -

testing <- function(var1) {
    if(var1 == "heart attack") {
        col_no <- 11
        col_no
    } else if(var1 == "heart failure") {
        col_no <- 17
        col_no
    } else if(var1 == "pneumonia") {
        col_no <- 23
        col_no
    } else {"error"}
}

(B)输出: -

testing("heart attack")
# [1] 11

col_no
# Error: object 'col_no' not found

testing("heart failure")
# [1] 17

col_no
# Error: object 'col_no' not found

testing("pneumonia")
# [1] 23

col_no
# Error: object 'col_no' not found

当我输入“testing(”heart failure“)”时,我期望col_no的值为17而不是错误。

同样,当我输入“testing(”pneumonia“)”时,我期望col_no的值为23而不是错误。

请帮忙!

2 个答案:

答案 0 :(得分:1)

这里使用switch

的语法更清晰
testing <- function(var1){
  switch(var1, 
         "heart attack" = 11,
         "heart failure"= 17,
         "pneumonia" = 23,
         "error")
}

调用该函数:

col_no <- testing("heart attack")
col_no
#[1] 11
col_no <- testing("heart failure")
col_no
#[1] 17
col_no <- testing("pneumonia")
col_no
#[1] 23
col_no <- testing("flue")
col_no
#[1] "error"

答案 1 :(得分:-3)

因为您定义了一个函数(测试),所以变量col_no仅在此函数中可用,而不在全局环境中。试试这个,然后变量也在全局环境中定义:

testing <- function(var1) {
if(var1 == "heart attack") {
    col_no <<- 11
    col_no
} else if(var1 == "heart failure") {
    col_no <<- 17
    col_no
} else if(var1 == "pneumonia") {
    col_no <<- 23
    col_no
} else {"error"}
}