Пакет R gamlss, используемый внутри foreach(), не может найти объект

Я пытаюсь получить прогнозируемые значения с исключением одного. Пожалуйста, помогите мне с этой проблемой "не могу найти объект". Я искал похожие проблемы, но не смог разобраться. Это на виндовс 10.

заранее спасибо

library('gamlss')
library('foreach')
library('doParallel')

registerDoParallel(cores = 4)
# Generate data
set.seed(314)
sample.size <- 30
input.processed.cut <- data.frame(TP = round(runif(sample.size) * 100), 
                                  FP = round(runif(sample.size) * 100), 
                                  x = runif(sample.size))
# Fit Beta-binomial
model3 <- gamlss(formula = cbind(TP, FP) ~ x,   
                 family = BB,  
                 data = input.processed.cut) 

# Get the leave-one-out values
loo_predict.mu <- function(model.obj, input.data) {
  yhat <- foreach(i = 1 : nrow(input.data), .packages="gamlss", .combine = rbind) %dopar% {
    updated.model.obj <- update(model.obj, data = input.data[-i, ])
    predict(updated.model.obj, what = "mu", newdata = input.data[i,], type = "response")
  }
  return(data.frame(result = yhat[, 1], row.names = NULL))
}

par.run <- loo_predict.mu(model3, input.processed.cut)
# Error in { : task 1 failed - "object 'input.data' not found" 

> version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          4.3                         
year           2017                        
month          11                          
day            30                          
svn rev        73796                       
language       R                           
version.string R version 3.4.3 (2017-11-30)
nickname       Kite-Eating Tree 

person James    schedule 09.03.2018    source источник
comment
@akrun Мне кажется, что проблема не в foreach (хотя это указано в ОП). Чтобы увидеть это, просто замените %dopar% на %do. Мое мнение, что эта проблема - ошибка пакета {gamlss}.   -  person F. Privé    schedule 09.03.2018
comment
Спасибо за отзыв, исправил.   -  person James    schedule 09.03.2018
comment
Объясните, пожалуйста, если при переходе с допара на допар он ломается, значит, это вина допара, верно? Почему это должно быть gamlss?   -  person James    schedule 09.03.2018
comment
Я также получаю сообщение об ошибке, используя только %do% (последовательно), вот почему. object not found — это распространенная ошибка с foreach-parallel (как сообщает @akrun), потому что объект не передается в кластеры. Но эта ошибка возникает только в параллельной версии.   -  person F. Privé    schedule 09.03.2018
comment
Я наткнулся на подобную публикацию об объекте lm, но это не помогло. r. 789695.n4.nabble.com/   -  person James    schedule 09.03.2018
comment
Может быть, попробуйте найти GitHub, связанный с пакетом, и открыть там проблему. Или написать автору.   -  person F. Privé    schedule 09.03.2018
comment
Я написал им по электронной почте через gamlss.org и дал им ссылку на этот пост.   -  person James    schedule 09.03.2018


Ответы (1)


Я получил ответ от команды gamlss и убедился, что их решение работает. Единственное, что нужно было изменить, это предоставить «данные» вместе с «новыми данными» для прогнозирования().

loo_predict.mu <- function(model.obj, input.data) {
  yhat <- foreach(i = 1 : nrow(input.data), .packages="gamlss", .combine = rbind) %dopar% {
    updated.model.obj <- update(model.obj, data = input.data[-i, ])
    predict(updated.model.obj, what = "mu", data = input.data[-i, ],
            newdata = input.data[i,], type = "response")
  }
  return(data.frame(result = yhat[, 1], row.names = NULL))
}
person James    schedule 13.03.2018