caret パッケージを使用して gbm モデルを実行しており、doredis パッケージで並列処理を使用して動作させようとしています。バックエンド ワーカーをすべて稼働させることはできますが、最終モデルに再結合するときに問題が発生します。このエラーが発生しています:
Error in foreach(j = 1:12, .combine = sum, .multicombine = TRUE) %dopar% :
target of assignment expands to non-language object
foreach ループを実行しようとするのはこれが初めてであり (gbm のような複雑な問題は言うまでもなく)、これを理解して実装しようとして問題が発生しています。私は多くの Google 検索を行ってきましたが、gbm で foreach を実装することについて何も見つかりませんでした。foreach を理解するための助けをいただければ幸いです。これが私のコードです:
set.seed(825)
library(caret)
require(foreign)
data <- read.spss("C:\\Users\\cc\\Documents\\mydata.sav",use.value.labels=TRUE, to.data.frame = TRUE)
getOption("max.print")
options(max.print = 99999999)
set.seed(825)
start.time <- Sys.time()
x <- data[, -162]
y <- data[, 162]
fitControl = trainControl(method = "cv", number = 8, allowParallel=TRUE)
gbmGrid <- expand.grid(interaction.depth = c(49), n.trees = (1:2), shrinkage = c(0.03), n.minobsinnode = 50)
require(doRedis)
registerDoRedis('jobs')
options('redis:num'=TRUE)
foreach(j=1:12,.combine=sum,.multicombine=TRUE) %dopar%
gbmFit <- train(x=x,y=y,"gbm", tuneGrid = gbmGrid, trControl=fitControl)
gbmFit
summary(gbmFit)
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
更新
ある種のデータセットでの再現に関する提案に従って、mydata を Iris データセットに切り替えdata <- iris
、X と Y を に変更するx <- data[, -5]
y <- data[, 5]
と、同じエラーが発生しました。