R 通过列表或
我希望能够独立地或通过列表传递R 通过列表或,r,R,我希望能够独立地或通过列表传递do.calc的第一个参数,但是当我将列表传递到…中时,我在calc中看不到它。当我直接调用calc而不是在optim中调用时,这不是问题。我是否遗漏了一些关于optim工作原理的信息 do.calc <- function(...){ optim(x, calc, ...) return(NULL) } calc <- function(x, ...){ args <- list(...) if(is.null(names(ar
do.calc
的第一个参数,但是当我将列表传递到…
中时,我在calc
中看不到它。当我直接调用calc
而不是在optim
中调用时,这不是问题。我是否遗漏了一些关于optim
工作原理的信息
do.calc <- function(...){
optim(x, calc, ...)
return(NULL)
}
calc <- function(x, ...){
args <- list(...)
if(is.null(names(args))) {args <- unlist(args, rec = F)} # my attempt at handling the optional list
args <- c(args, other = 3)
dput(args)
return(0)
}
do.calc(list(a = 1, b = 2))
do.calc(a = 1, b = 2)
do.calc我们可以使用do.call
并将参数作为列表传递给函数do.calc
do.call(do.calc, list(a = 1, b = 2))
-测试
out1 <- capture.output(do.call(do.calc, list(a = 1, b = 2)))
out2 <- capture.output(do.calc(a = 1, b = 2))
identical(out1, out2)
#[1] TRUE
akrun的回答给了我一个很好的线索,但没有完全回答我的问题,因为我没有选择将参数作为list
和独立传递。诀窍是在传递给optim
之前先进行参数处理——我认为这是因为optim需要命名它的…
参数
do.calc <- function(...){
args <- list(...)
if(is.null(names(args))) {args <- unlist(args, rec = F)}
optim(x, args=args)
return(NULL)
}
calc <- function(x, args){
args <- c(args, other = 3)
dput(args)
return(0)
}
do.calc(list(a = 1, b = 2))
do.calc(a = 1, b = 2)
do.calc
do.calc <- function(...){
args <- list(...)
if(is.null(names(args))) {args <- unlist(args, rec = F)}
optim(x, args=args)
return(NULL)
}
calc <- function(x, args){
args <- c(args, other = 3)
dput(args)
return(0)
}
do.calc(list(a = 1, b = 2))
do.calc(a = 1, b = 2)