r语言 - 使用未计算但不断变化的参数创建未计算的函数调用



上一篇文章展示了如何使用quote()创建对参数也未计算的函数的未计算调用:

foo <-function(arg1,arg2){
value <- arg1 + arg2
}
foocall <- call("foo",arg1=quote(x),arg2=quote(y))
foocall
# foo(arg1 = x, arg2 = y)

我怎样才能保持这种质量,但允许 arg1 的规格发生变化。例如,我的环境中有两个命名对象 n 和 m,有时我想传递一个,有时我想传递另一个。

## Named objects
n <- c(2,3)
m <- 3
## Case 1: i would like to pass over n
z <-n
call("foo", arg1=quote(z), arg2=quote(y))
## desired output 
#foo(arg1 = n, arg2=y)
## Case 2: pass over m 
z <- m
call("foo", arg1=quote(z), arg2=quote(y))
## desired output 
#foo(arg1 = m, arg2=y)

我很难正确表述我的问题,但我会这样陈述:我如何为 arg1 分配一个可以更改但不计算"一路向下"的变量,而只分配给它绑定的对象的名称?

当你这样做时

> z <- n

右侧被计算,因此符号z被分配n,而不是符号n本身。

> z
[1] 2 3

现在与

> z <- quote(n)

现在z的值是一个符号,即符号n

> z
n

因此,现在您可以做

> call('foo', arg1=z, arg2=quote(y))
foo(arg1 = n, arg2 = y)

它将按预期工作。

最新更新