странная ошибка jags.parallel / избегать ленивых вычислений при вызове функции
У меня есть вызов функции (дляjags.parallel
), который работает, когда дан числовой аргумент, такой какn.iter = 100
но терпит неудачу, когда аргумент использует значение переменной,n.iter = n.iter
, Похоже, что это может быть ошибка вjags.parallel
Минимальный воспроизводимый пример ошибки:
library(R2jags)
model.file <- system.file(package="R2jags", "model", "schools.txt")
J <- 8.0
y <- c(28.4,7.9,-2.8,6.8,-0.6,0.6,18.0,12.2)
sd <- c(14.9,10.2,16.3,11.0,9.4,11.4,10.4,17.6)
jags.data <- list("y","sd","J")
jags.params <- c("mu","sigma","theta")
jags.inits <- function(){
list("mu"=rnorm(1),"sigma"=runif(1),"theta"=rnorm(J))
}
Тогда это работает:
jagsfit.p <- jags.parallel(data=jags.data, inits=jags.inits, jags.params,
n.iter=5000, model.file=model.file)
Но это не так:
n.iter=5000
jagsfit.p <- jags.parallel(data=jags.data, inits=jags.inits, jags.params,
n.iter=n.iter, model.file=model.file)
Давать ошибку:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
3 nodes produced errors; first error: object 'n.iter' not found
Я понимаю, что это как-то связано с отсутствием экспорта переменнойn.iter
в кластер, но не ясно, какой параллельный движок использует jags.parallel. Есть ли способ обмануть R, чтобы оценитьn.iter
прежде чем передать его в функцию?