[英]How to concentrate function arguments into a vector in R by a function?
I have some R-function f
, which fixes some parameters of some other function target
(thanks to GKi for help ):我有一些 R-function f
,它修复了一些其他 function target
的一些参数(感谢GKi 的帮助):
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", mget(variable), as.list(fixed))))
return(target_new)
}
f(fixed,variable)
> function (o2, b2)
> target(o2 = o2, b2 = b2, b1 = 1, l1 = 2, l2 = 3, l3 = 4, o1 = 5)
> <environment: 0x0000020a8e0c0c88>
I want to maximize target_new
by nlm, so I need to concentrate its function arguments into a vector, ie the desired output of f(fixed,variable)
is我想通过nlm最大化target_new
,所以我需要将它的function arguments集中到一个向量中,即所需的output为f(fixed,variable)
> function (theta)
> target(o2 = theta[1], b2 = theta[2], b1 = 1, l1 = 2, l2 = 3, l3 = 4, o1 = 5)
How to modify the above code, so that the function can process the vector theta
?如何修改上述代码,使 function 可以处理向量theta
?
Please mind that the vectors fixed
and variable
can be of variable lengths.请注意, fixed
向量和variable
向量可以是可变长度的。
You are making this too complicated.你把这弄得太复杂了。
f <- function(fixed, variable) {
function(theta) {
args <- c(as.list(theta), as.list(fixed))
names(args)[seq_along(variable)] <- variable
do.call(target, args)
}
}
fun <- f(fixed, variable)
#does it work?
all.equal(
nlm(fun, p = c(1, 2)),
nlm(function(theta) target(1,theta[2], 2, 3, 4, 5, theta[1]),
p = c(1, 2))
)
#[1] TRUE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.