Я хотел бы динамически назначать переменные внутри функции.Например, я хочу запустить следующую функцию с различными входами для ...
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]])
Есть ли способ сделать это для списканеизвестной длины?