Как я могу динамически назначать входы для функций в R? - PullRequest
0 голосов
/ 04 марта 2019

Я хотел бы динамически назначать переменные внутри функции.Например, я хочу запустить следующую функцию с различными входами для ... s

calc_recruits <- function(SSB, stored_rec_funs, ...){
  rec <- mapply(function(stored_rec_funs, SSB, ...){stored_rec_funs(SSB, ...)}, SSB=SSB, stored_rec_funs=stored_rec_funs, ...=...)
  return(rec)
}

Если у меня есть:

rec_BH <- function(SSB, a, b, ...){
  SSB <- SSB/1e9 # SSB in tonnes x 10^3
  print(c(a,b))
  return(a*SSB/(1+b*SSB))
}

stored_rec_funs <- rep(list(rec_BH),5)
SSB <- rep(10e10,5)

rec_pars <- list(a=rep(1:5),b=seq(0.001,0.005,0.001))

затем

calc_recruits <- function(SSB, stored_rec_funs, rec_pars){
  rec <- mapply(function(stored_rec_funs, SSB, ...){stored_rec_funs(SSB, ...)}, SSB=SSB, stored_rec_funs=stored_rec_funs,assign(names(rec_pars)[1],rec_pars[[1]]),assign(names(rec_pars)[2],rec_pars[[2]]))
      return(rec)
    }

calc_recruits(SSB, stored_rec_funs, rec_pars)

дает правильный ответ.

Однако, поскольку я на самом деле не знаю length(rec_pars), невозможно просто написать:

assign(names(rec_pars)[1],rec_pars[[1]]),assign(names(rec_pars)[2],rec_pars[[2]])

Есть ли способ сделать это для списканеизвестной длины?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...