检查传入函数的参数是否在r中定义?

检查传入函数的参数是否在r中定义?,r,function,undefined-variable,R,Function,Undefined Variable,我想知道在函数内部对传递到函数中的变量应用更多操作之前,如何检查变量的存在性。因此,如果找不到变量,可以使用if-else语句忽略它。下面是一个示例代码。请注意,变量的名称是使用“paste0”函数构造的。这是因为它们以后必须被送入一个循环,为了简化,我省略了其余的操作 existence = function(x1, x2, x3, x4) { for (i in 1:4){ varName <-paste0("x", i) # Chec

我想知道在函数内部对传递到函数中的变量应用更多操作之前,如何检查变量的存在性。因此,如果找不到变量,可以使用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")
    }
  }
}


<>你可以考虑通过字符符号测试变量的存在性。使用
ls()


<代码> b> p>可以考虑通过字符符号测试变量的存在性。使用
ls()


你好!检查并阅读。我认为,正如作者所建议的,检查某些参数是否传递的最简单方法是将它们全部设置为NA/NULL,并且使用
是.NA()
是.NULL()
同意您应该将所有可选参数设置为
NULL
作为默认值;但是,如果将条件更改为
if(tryCatch({get(varName);TRUE},error=function(e)FALSE)&&&!is.null(get(varName))
,则函数应按原样工作;但是,
existence(a,b,NULL,C)
会给您一个意外的答案,因为
C
是定义的,但不是您在实际代码中想要的方式,所有参数都默认设置为NULL。缺少的()不起作用。@rawr,您提供的if语句起作用了。谢谢你好检查并阅读。我认为,正如作者所建议的,检查某些参数是否传递的最简单方法是将它们全部设置为NA/NULL,并且使用
是.NA()
是.NULL()
同意您应该将所有可选参数设置为
NULL
作为默认值;但是,如果将条件更改为
if(tryCatch({get(varName);TRUE},error=function(e)FALSE)&&&!is.null(get(varName))
,则函数应按原样工作;但是,
existence(a,b,NULL,C)
会给您一个意外的答案,因为
C
是定义的,但不是您在实际代码中想要的方式,所有参数都默认设置为NULL。缺少的()不起作用。@rawr,您提供的if语句起作用了。谢谢
b <- 10
c <- 5
existence(a, b, NULL, c)
x1 is Not defined
x2 is defined
x3 is Not defined
x4 is defined
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'