我正在使用插入包运行gbm模型,并尝试使用doredis包进行并行处理。我可以让后端工作人员全部启动并运行,但是当他们重新组合到最终模型时会遇到问题。我收到了这个错误:
Error in foreach(j = 1:12, .combine = sum, .multicombine = TRUE) %dopar% :
target of assignment expands to non-language object
这是我第一次尝试运行foreach循环(更不用说像gbm这样的复杂问题),并且在尝试理解并实现此问题时遇到了问题。我已经完成了许多谷歌搜索,并没有发现使用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
更新
根据有关使用某种数据集进行复制的建议,我使用Iris数据集data <- iris
切换了mydata,并将X和Y更改为x <- data[, -5]
y <- data[, 5]
并发生了同样的错误。
答案 0 :(得分:0)
我找到了答案!我与redis的创作者取得联系,后者又与插入符号的创建者联系。似乎插入符号会自动处理拆分作业,因此不需要foreach循环。只需完全删除该行即可完美运行。
另一方面,他指示我告诉其他人去gitihub下载最新的doRedis软件包,因为它比当前的doredis软件包更好,但是没有为CRAN做好准备。
使用此代码安装新的doRedis软件包(请注意,在运行代码之前,请确保已安装Rtools)
install.packages("devtools")
devtools::install_github("bwlewis/doRedis")