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)