将c(“x”,“y”,“z”)之类的矢量转换为函数(x,y,z){}

时间:2015-08-06 19:33:24

标签: r function vector arguments

如何在R?

中将c("x","y","z")之类的向量转换为function(x , y, z){}

我正在寻找像formalArgs()的反向功能。

请注意,我知道as.function(alist(x=,y=,{})),但我不知道如何从给定的向量中插入x=y=

2 个答案:

答案 0 :(得分:7)

基本上要让它工作,你需要打电话

as.function(alist(x=bquote(), y=bquote(), z=bquote(), {}))

相当于

alist

第二种形式很好,因为我们有一组do.call的命名参数,可以使用列表和l <- list(x=bquote(), y=bquote(), z=bquote(), bquote({})) as.function(do.call(alist, l)) # function (x, y, z) # { # } 以编程方式提供:

l

剩下的就是从变量名列表中以编程方式构建列表setNames,可以使用replicatevec <- c("x","y","z") as.function(do.call(alist, c(setNames(replicate(length(vec), bquote(), F), vec), bquote({})))) # function (x, y, z) # { # } 来完成:

float: right;

答案 1 :(得分:3)

参数只是一个命名列表。对内部旋风的胁迫是自动的。

#argument list
p<-c("x","y","z")
args<-vector("list",length(p))
for(i in seq(args)) args[[i]]<-substitute()
names(args)<-p

#set a default value for y for the sake of example
args$y<-2

#construct function
body<-quote(x+y+z)
f<-as.function(c(args,body))

#test it
f(1,z=3)
#[1] 6