使用gbm时出现两个错误-类型为“closure”的对象不可子集-eval(predvars、data、env)中出错:数值“envir”参数的长度不为1

使用gbm时出现两个错误-类型为“closure”的对象不可子集-eval(predvars、data、env)中出错:数值“envir”参数的长度不为1,r,R,我一直得到上面列出的两个错误。第一次是在我使用训练数据时,第二次是在我使用所有数据时。任何帮助都将不胜感激。我已经讨论了这里所有类似的问题,但我仍然不知道如何解决我的问题。下面是我的代码和数据的示例: D1= c(1.8, 1.06, 0.46, 34.65, 1.8, 4.16, 2.55, 5.95, 13.63,3.72,1.38,14.94,17.08,3.39) D2 = c(1,1,2,6,1,3,1,6,6,2,1,3,1,5,3) D3= c(13,9, 211, 336,

我一直得到上面列出的两个错误。第一次是在我使用训练数据时,第二次是在我使用所有数据时。任何帮助都将不胜感激。我已经讨论了这里所有类似的问题,但我仍然不知道如何解决我的问题。下面是我的代码和数据的示例:

 D1= c(1.8, 1.06, 0.46, 34.65, 1.8, 4.16, 2.55, 5.95, 13.63,3.72,1.38,14.94,17.08,3.39)
 D2 = c(1,1,2,6,1,3,1,6,6,2,1,3,1,5,3)
 D3= c(13,9, 211, 336, 2, 293.95, 211.95, 29, 0, 146, 0, 139.95, 12.04)
 D4 = c(m,m,m,m,m,m,m,m,m,m,m,f,m,m,f)
 D5 = c(0,0,0,1,0,1,0,1,1,0,0,1,0,0,0,1,1)
这些只是我的数据集的前15个值

data = c(D1,D2, D3, D4, D5)
library('caTools')
set.seed(165)
splir = sample.split(data$HighUtPt, SplitRatio = 0.65)
train = subset(data, splir == TRUE)
test = subset(data, splir == FALSE)
require(gbm)
gbm_mod <-gbm(D5~ D1+D2+D3+D4, distribution = gaussian, data = train, shrinkage = 0.005, n.trees = 1000, bag.fraction = 0.5, cv.fold=50, interaction.depth=3) 

Error in eval(predvars, data, env) :  #numeric 'envir' arg not of length one
当我将data参数更改为data=data时,我得到: 'd$name中的错误:“closure”类型的对象不可子集'


当我使用主数据集时

这个例子似乎不正确。你真的做过数据=cD1,D2,D3,D4,D5吗?因为这是单个字符向量,而不是data.frame。数据$HighUtPt应该从哪里来,因为您没有任何标记为HighUtPt的东西,splir也一样。请确保你的例子是正确的。谢谢。是的,它来自csv文件。我不知道如何附加csv文件,所以我复制了上面的数据。当您看到数据$HighUtPt时,它应该是数据$D5。data=data.frameD1、D2、D3、D4、D5库'caTools'set.seed165 splir=sample.splitdata$D5,SplitRatio=0.65 train=subsetdata,splir==TRUE test=subsetdata,splir==FALSE requiregbm gbm_mod请更新/编辑原始问题,而不是在注释中添加新的/正确的信息。