https://cran.r-project.org/package=optimParallel

отрим функцию

f <- function(x, X) mean(c(x,X))

Как я могу автоматически (путем манипулированияf()) изменить подписьf() так что его можно использовать сlapply()без возврата следующей очевидной ошибки?

lapply(X=list(1), FUN=f, X=1)
Error in lapply(X = list(1), FUN = f, X = 1) : 
  formal argument "X" matched by multiple actual arguments

Подход, который я использовал до сих пор, состоит в том, чтобы удалить все аргументы изf()назначить их в среду и оценитьf() в этой среде.

integrateArgs <- function (f, args) 
{
    form <- formals(f)
    if (!is.null(form)) 
        for (i in seq_along(form)) assign(names(form)[i], form[[i]])
    if (!is.null(args)) 
        for (i in seq_along(args)) assign(names(args)[i], args[[i]])
    ff <- function() {
    }
    parent.env(environment(ff)) <- parent.env(environment(f))
    body(ff) <- body(f)
    if (any(names(form) == "...")) 
        formals(ff) <- form[names(form) == "..."]
    ff
}
fnew <- integrateArgs(f, list(x=1, X=4))
lapply(list(fnew), function(x) x())
[[1]]
[1] 2.5

Однако такой подход приводит к следующей ошибке, еслиf() это функция из другого пакета R, которая вызывает скомпилированный код

fnew2 <- integrateArgs(dnorm, list(x=1, mean=4))
lapply(list(fnew2), function(x) x())
Error in x() (from #1) : object 'C_dnorm' not found

Есть ли лучшие решения?

Ответы на вопрос(1)

Ваш ответ на вопрос