2017-09-15 16 views
7

저는 R 및 RStudio를 처음 사용하고 예측 모델링을 실험 해 왔습니다. 다음과 같은 열차 기능은 병렬 처리없이 작동하지만 doSNOW makeCluster를 구현하면 "optimismBoot"라는 변수와 관련된 오류가 발생합니다. 나는 결백을 모색하고 패키지 설치 및 제거를 시도했지만 아무 것도 작동하지 않습니다. 어떤 통찰력도 감사하겠습니다. 캐럿 트레인 기능 - 변수 "optimismBoot"를 찾을 수 없습니다.

cl <- makeCluster(2, type = "SOCK") 

registerDoSNOW(cl) 

caret.cv <- train(ReturnedToMF ~ ., 
         data = trees.cetstrain, 
         method = "xgbTree", 
         tuneGrid = tune.grid, 
         trControl = cetstrain.control) 
Error in e$fun(obj, substitute(ex), parent.frame(), e$data) : 
    unable to find variable "optimismBoot" 

은이 사이트에 다음 링크를 발견하지만 정말 병렬 처리 작업 할 수있는 솔루션을 제공하지 않습니다 Caret on R spills "unable to find variable "optimismBoot"" error message

답변

23

캐럿 GitHub의 페이지에서이 문제에 대한 참조가입니다. https://github.com/topepo/caret/issues/706

을 경우, 나는이 문제를 해결해야 GitHub의에서 직접 caret를 설치하는 추측 : 그들은 것 최근

여기 참조를 해결 한합니다.

devtools::install_github('topepo/caret/pkg/caret')

여기를 참조하십시오 : https://github.com/topepo/caret

는 다음 단계에 따라 명령을 실행

  1. 보통
  2. devtools 패키지를 설치 (난 당신이 RStudio를 사용하고 있으리라 믿고있어) devtools::install_github('topepo/caret/pkg/caret') 출력을 확인하여 패키지가 github에서 새로 고쳐 졌는지 확인하십시오.
  3. RStudio/R을 다시 시작하십시오. 패키지 탐색기의 캐럿 버전은 이전과 동일하지만 패키지는 새 코드를 사용합니다
  4. 업데이트가 제대로되어 있는지 확인하려면 caret:::nominalTrainWorkflow으로 변경된 내부 함수의 소스 코드를 출력하고 다음을 확인하십시오 거기에있는 라인은 export <- c("optimism_xy")입니다. 당신이 지금 그것을 할 경우, 줄은 ​​것 optimismBoot 대신

optimism_xy의 PS : 캐럿의 최신 버전은 2017 그래서뿐만 아니라 문제를 해결해야 업데이트 9 월 7 일 일자.

+1

수정 프로그램이 2017 년 9 월 11 일에 있었던 것 같습니다. 9 월 7 일부터 패키지 (6.0-77) 수정 프로그램이 없습니다 :) – armen

+1

@armen : damn elapsedTime! :-)'install_github'는 앞으로 나아갈 길입니다 –

+1

제가 할 수있는 것은 내가 새로운 탈옥을 기다리는 것입니다. 현재 버전 6.0-77이 설치되어 있고 CRAN에서 업데이트를 확인하는 데 새로운 것이 없습니다. 새 버전이 얼마나 자주 게시되는지 알고 싶습니다. – cag

2

새로운 캐럿 버전이 caret_6.0-77 인 패키지를 업데이트했을 때이 문제가 발생했습니다. 이전 버전의 캐럿 패키지를 다운로드하면 해결할 수 있습니다. crant 아카이브 패키지에서 caret_6.0-76입니다. 이 링크를 클릭하십시오 here!을 클릭 한 다음 도구 메뉴에서 Rstudio를 사용하여 패키지 파일을 로컬에 설치 한 다음 패키지 설치를 선택하십시오 팝업 메뉴에서 대화 상자가 나타납니다 파일 (.extension)에서 설치를 선택하십시오

이 정보가 도움이 되었기를 바랍니다.

0

병렬 처리에 example from the docs을 사용한다고 말하고 싶습니다.

library(parallel) 
library(doMC) 
# use all cores except one 
doMC::registerDoMC(cores = parallel::detectCores() - 1) 

당신이해야 할 전부 그, 그럼 당신은 train()을 실행할 수 있으며 사용자가 지정한 코어의 수를 사용한다. parallel 라이브러리를 사용하여 코어 수를 동적으로 감지하기 위해 약간 수정했습니다.