r - 检查传递的参数是否存在

标签 r arguments

我正在尝试检查作为参数传递给函数的变量是否存在。基于对 this 的回答我有以下问题:

myfunction <- function(x) {
  stopifnot(exists(deparse(substitute(x))))
}

但是,如果参数是要计算的表达式,则它不起作用:

a=c(1:10)
myfunction(a+10)

如果参数不仅仅是一个变量,我如何确保捕获不存在的变量?

最佳答案

一个选项是组合 match.call(返回对函数的调用)和 all.vars(返回表达式中的名称)。试试这个:

fcn <- function(x) {
  varnames <- all.vars(match.call())
  for (x in varnames)
    stopifnot(exists(x))
}

fcn(a) # returns error, as expected
#Error: exists(x) is not TRUE

# create "a"
a <- 2
fcn(a + 1) # no error returned since "a" exists

同样,

fcn(a + b) # error returned since "b" does not exist
#Error: exists(x) is not TRUE
b <- 4
fcn(a + b) # no error since "b" now exists

关于r - 检查传递的参数是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385560/

相关文章:

Python 时间 : How to initialize arguments for timed function before every repetition?

c - getopt 不解析参数的可选参数

bash - 带有参数的可覆盖预定义 Bash 变量

r - 使用 R 保存图像和 .csv,我可以使用 R 将它们上传到网站(使用 filezilla 手动完成)?

Python,我正在尝试创建这种参数 -active=YES

c - 使用变量作为函数参数和直接使用字符串作为函数参数有什么区别?

r - 在栅格列表列表上执行循环

r - R : covariance matrix is not non-negative definite 中的 Princomp 错误

r - ggplot 中热图右侧的 geom_text

r - 在 R 中查找具有模式的列的最大值/最小值