1

我想知道如何在函数内部对它们应用更多操作之前检查传递给函数的变量是否存在。因此,如果找不到变量,可以使用 if-else 语句将其忽略。这是一个示例代码。请注意,变量的名称是使用“paste0”函数构造的。这是因为它们必须稍后被送入循环,为了简化,我省略了剩余的操作。

existence = function(x1, x2, x3, x4) {
  for (i in 1:4){
    varName <-paste0("x", i)
    
    # Check if a defined variable is passed into the function
    if(exists(varName)){ 
      message(varName, " is defined")
    } else {
      message(varName, " is NOT defined")
    }
  }
}

定义的变量只有 b 和 c。变量 a 未定义。但是,它被传递到函数中。“存在”函数还必须打印“未定义”消息,以防将 NULL 变量传递给它。

b <- 10
c <- 5
existence(a, b, NULL, c)

我使用的“存在”功能没有给出正确的答案。我希望答案是:

x1 is Not defined
x2 is defined
x3 is Not defined
x4 is defined
4

1 回答 1

0

您可以考虑通过其字符符号测试变量的存在。variables-to-check作为字符向量传递并variables-in-existence使用作为字符传递ls()

b <- 10
c <- 5

existence = function(vars_to_check, vars_created) {
    test <- vars_to_check %in% vars_created
    names(test) <- vars_to_check
    test
}

existence(
    c('a', 'b', 'NULL', 'c'), 
    ls()
)
#     a     b  NULL     c
# FALSE  TRUE FALSE  TRUE

对函数的修改允许您仅返回现有变量

existence = function(vars_to_check, vars_created) {
    test <- vars_to_check %in% vars_created
    vars_to_check[test]
}

existence(
    c('a', 'b', 'NULL', 'c'), 
    ls()
)
# 'b' 'c'
于 2020-07-25T00:24:54.663 回答