3

foreach を使用して並列シミュレーションを行うことについて質問があります。何時間も費やしてエラーが発生し続けるので、事前に助けていただければ幸いです。

私は foreach() をシミュレーション研究に使用しています。各反復で、その関数自体にいくつかの「通常の」ループがある関数を実行します。順番に実行すると、完全に正常に動作します。Linux サーバーでは、R 内で foreach を使用して並列に実行すると正常に動作しますが、「nohup R CMD BATCH」コマンドを使用してバッチ モードで実行するとすぐに、エラーが返され始めます。シミュレーションごとにシード番号を手動で設定しました。つまり、R 内で並列に実行する場合でも、バッチ モードで並列に実行する場合でも、R 内で順次実行する場合でも、私のコードは基本的に同じシミュレートされたデータで実行されるため、1 つの方法で生成されない場合他のエラーもエラーにつながるべきではありませんが、奇妙なことに、そうではありません。誰かが同じ挑戦をしましたか?

私は何時間もかけて例外処理を行いましたが、何も起こりませんでした。

これが私のコードです:

 dataSim <- function(seedNum, n, mi, beta0FE, beta1, beta0RE){

 # Setting the seed number:
 set.seed(seedNum)

 # Generating covariates:
 x <- rnorm(n, mean = 0, sd = 1)

 # Generating Y:
 data <- data.frame(id = rep(1:n, each = mi), x = rep(x, each = mi),     
                    beta0_RE = rep(beta0RE, each = mi))
 etaTmp <- data$beta0_RE + beta0FE + beta1*data$x
 piTmp <- exp(etaTmp)/(1 + exp(etaTmp))
 data$Y <- sapply(piTmp, rbinom, n = 1, size = 1)  
 return(data)
}

# Data Simulation Parameters:
n <- 100
mi <- 30
beta0FE <- 0.3
beta1 <- 1
beta0RE <- rnorm(n, 0, 1)

# Simulation Parameters:
nSim <- 10000
nIter <- 4000

LME_Freq_Fun <- function(data){
fit.LME <- try(glmmPQL(Y ~ x, random = ~ 1 | id, 
               family = binomial, data = data))
print(class(fit.LME)[1])
if (class(fit.LME)[1] == "try-error"){
  return(list(coef.FE.LME = rep(NA, 3),
            coef.RE.LME = rep(NA, n)))
}else{
  return(list(coef.FE.LME = fit.LME$coefficients$fixed,
            coef.RE.LME = fit.LME$coefficients$random$id))
 }
}

LME_Freq_RSLT <- foreach (i = 1:nSim) %dopar%{
 print(paste("i=", i))
 print("-------")
 data <- dataSim(i, n, mi, beta0FE, beta1, beta0RE)
 LME_Freq_Fun(data)
}

  # Extracting elements from foreach:
  Coef.Fixed.LME <- t(sapply(1:nSim ,function (i) 
                                     return(LME_Freq_RSLT[[i]][[1]] )))
  Coef.Rand.LME <- t(sapply(1:nSim ,function (i) 
                                     return(LME_Freq_RSLT[[i]][[2]] )))

「試行」なしで、私は取得し続けます:タスク3527が失敗しました-「$演算子は原子ベクトルに対して無効です」

試してみると、私の Coef.Fixed.LME はすべての要素が "numeric.2" で非常に奇妙になります!

4

0 に答える 0