我正在使用 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]
并发生相同的错误。