如何创建一个函数,该函数返回R中具有固定参数的函数?

如何创建一个函数,该函数返回R中具有固定参数的函数?,r,function,call,substitution,do.call,R,Function,Call,Substitution,Do.call,我有一些R函数目标,有很多参数: target=函数(b1、b2、l1、l2、l3、o1、o2)返回((b1+b2+l1+l2+l3+o1+o2)^2) 目标的某些参数应保持固定(存储在命名向量固定),而某些参数应为可变参数(其名称存储在向量变量): fixed=c(b1=1,l1=2,l2=3,l3=4,o1=5) 变量=c(“o2”、“b2”) 现在,我想编写一个函数f,输入fixed和variable,返回(未执行的)函数target,其中fixed中的参数固定在fixed中的值 到目

我有一些R函数
目标
,有很多参数:

target=函数(b1、b2、l1、l2、l3、o1、o2)返回((b1+b2+l1+l2+l3+o1+o2)^2)
目标
的某些参数应保持固定(存储在命名向量
固定
),而某些参数应为可变参数(其名称存储在向量
变量
):

fixed=c(b1=1,l1=2,l2=3,l3=4,o1=5)
变量=c(“o2”、“b2”)
现在,我想编写一个函数
f
,输入
fixed
variable
,返回(未执行的)函数
target
,其中
fixed
中的参数固定在
fixed
中的值

到目前为止,我的结果是:

f=函数(固定、可变){
###使用固定参数创建新的“目标”函数
target_new=函数(){}
###创建参数
formals(target_new)=集合名(rep(list(bquote())、长度(variable))、变量)
###创造身体
body(target_new)=调用(“target”,固定,可变)
###返回带有固定参数的新“目标”函数
返回(目标\新)
}
我无法创造身体。它应该结合使用
do.call
call
substitute
deparse
-有人知道怎么做吗

f(固定=c(b1=1,l1=2,l2=3,l3=4,o1=5),变量=c(“o2”,“b2”))的期望输出是:

功能(o2、b2)
目标(b1=1,l1=2,l2=3,l3=4,o1=5,o2=o2,b2=b2)
编辑

通过

###创建主体
参数=c(粘贴(变量,“=”,变量),粘贴(名称(固定),“=”,固定))
body(f)=调用(“目标”,参数)
屈服

功能(o2、b2)
目标(c(“b1=1”、“l1=2”、“l2=3”、“l3=4”、“o1=5”、“o2=o2”、“b2=b2”))

这几乎是所需的输出(除了引号和
c()
)。

您可以使用
do.call
并将
as.symbol
分配给变量


target可能您针对这个新问题提出了一个新问题。
target <- function(b1,b2,l1,l2,l3,o1,o2) return((b1+b2+l1+l2+l3+o1+o2)^2)
fixed <- c(b1 = 1, l1 = 2, l2 = 3, l3 = 4, o1 = 5)
variable <- c("o2","b2")

f <- function(fixed, variable) {
  target_new <- function() {}
  formals(target_new) <- setNames(rep(list(bquote()), length(variable)), variable) 

  for(i in variable) assign(i, as.symbol(i))
  body(target_new) <- do.call("call", unlist(list("target",  as.list(fixed), mget(variable))))

  target_new
}

f(fixed = c(b1 = 1, l1 = 2, l2 = 3, l3 = 4, o1 = 5), variable = c("o2","b2"))
#function (o2, b2) 
#target(b1 = 1, l1 = 2, l2 = 3, l3 = 4, o1 = 5, o2 = o2, b2 = b2)
#<environment: 0x564b81f2ded8>

f(fixed, variable)(3, 4)
#[1] 484