如何在R?
中将c("x","y","z")
之类的向量转换为function(x , y, z){}
我正在寻找像formalArgs()
的反向功能。
请注意,我知道as.function(alist(x=,y=,{}))
,但我不知道如何从给定的向量中插入x=
和y=
。
答案 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
,可以使用replicate
和vec <- 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