【发布时间】:2020-11-14 15:42:37
【问题描述】:
我想知道在函数内部对变量应用更多操作之前,如何检查传递给函数的变量是否存在。因此,如果未找到变量,则可以使用 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
【问题讨论】:
-
嗨!检查
missing()并阅读this blog post。我认为,正如作者所建议的那样,检查某些参数是否通过的最简单方法是将所有参数设置为 NA/NULL 并使用is.na()或is.null() -
同意你应该将所有可选参数设置为
NULL作为默认值;但是,如果您将条件更改为if (tryCatch({get(varName); TRUE}, error = function(e) FALSE) && !is.null(get(varName))),您的函数应该按原样工作;然而,existence(a, b, NULL, C)也会给你一个意想不到的答案,因为C是定义的,但不是你想要的方式 -
在实际代码中,所有参数默认设置为NULL。 missing() 不起作用。
-
@rawr,您提供的 if 语句有效。谢谢!
标签: r function undefined-variable