predict.gbm$运算符对于原子向量无效
我有一段R代码,是我为正在进行的项目编写的。我想缩短代码以节省项目中的空间。我对R比较陌生,对for语句或函数(如apply)没有太多经验,但我一直在阅读R帮助文件以及本网站和R-bloggers.com上的其他问题,试图对这些函数有一些基本的了解 我使用的函数摘自dismo vignette的第18页 我的目标是 对树的每个级别重复gbm.fixed函数。复杂性从1到5,学习的每个级别。速率从0.001到0.01乘以0.001。 对所有gbm.fixed结果重复predict.gbm函数。 将所有calc.deviance结果返回到一个矩阵,其中的列名类似于tc1lr001:tc5lr01,以便我可以绘制结果。 我的方法是使用for循环。通过使用以下代码,我能够运行所有gbm.fixed函数predict.gbm$运算符对于原子向量无效,r,for-loop,R,For Loop,我有一段R代码,是我为正在进行的项目编写的。我想缩短代码以节省项目中的空间。我对R比较陌生,对for语句或函数(如apply)没有太多经验,但我一直在阅读R帮助文件以及本网站和R-bloggers.com上的其他问题,试图对这些函数有一些基本的了解 我使用的函数摘自dismo vignette的第18页 我的目标是 对树的每个级别重复gbm.fixed函数。复杂性从1到5,学习的每个级别。速率从0.001到0.01乘以0.001。 对所有gbm.fixed结果重复predict.gbm函数。 将
for (i in 1:5){
for (j in seq(0.001,0.01,0.001)){
#Call the gbm.fixed model
assign(paste0("test.tc",i,"lr.",substr(j,3,7)),
gbm.fixed(data=data.train,
gbm.x = 3:10,
gbm.y = 2,
learning.rate = j,
tree.complexity = i,
n.trees = 10000))
}}
但是,当我尝试使用以下代码运行predict.gbm函数时
for (i in 1:5){
for (j in seq(0.001,0.01,0.001)){
tree.list<-seq(100,10000,100)
assign(paste("pred.tc",i,"lr.",substr(j,3,7),sep=""),
predict.gbm(paste0("test.tc",i,"lr.",substr(j,3,7)),
data.test,
n.trees=tree.list,
"response"))
}}
我做了一些阅读,有相当多的帖子关于$operator对原子向量无效,但我找不到任何与我现在做的应用程序相同的应用程序
我确信这是件简单的事情,但我现在似乎不能把我的头脑集中在它上面。欢迎您的任何意见
作为参考,这里是一个迭代树的例子。复杂度=1,学习率=0.001,这是我试图循环的工作代码
samp <- sample(nrow(data), round(samp.size * nrow(data)))
data.train <- data[samp,]
data.test <- data[-samp,]
tree.list<seq(100,20000,100)
test.tc1.lr001<- gbm.fixed(data=data.train,
gbm.x=2:10, #predictor variables
gbm.y=1, #response variable
learning.rate=0.001,
tree.complexity=1,
n.trees=20000)
pred.tc1.lr001 <- predict.gbm(test.tc1.lr001,
data.test,
n.trees=tree.list,
"response")
#Calculate the deviance for all the results
pred.dev.tc1.lr001 <- rep(0,200)
for (i in 1:200) {
pred.dev.tc1.lr001[i] <- calc.deviance(data.test[,1],
pred.tc1.lr001[,i],
calc.mean=TRUE)
}
尝试将浏览器置于最后一个for循环中,并尝试手动调试或设置i和j值。您的代码不适用于我,因为我无法访问您的数据。这里有一行代码需要考虑:测试您还可以使用回溯来查看哪一行抛出了错误。但是,正如Roman指出的,依次计算每个对象将向您显示当您需要一个list对象才能使用$operator时,您在哪里创建了原子向量。@RomanLuštrik和Carl Witthoft感谢您的评论!如果我能找到解决方案,我会发布我问题的答案。你找到解决方案了吗?我也有类似的问题
samp <- sample(nrow(data), round(samp.size * nrow(data)))
data.train <- data[samp,]
data.test <- data[-samp,]
tree.list<seq(100,20000,100)
test.tc1.lr001<- gbm.fixed(data=data.train,
gbm.x=2:10, #predictor variables
gbm.y=1, #response variable
learning.rate=0.001,
tree.complexity=1,
n.trees=20000)
pred.tc1.lr001 <- predict.gbm(test.tc1.lr001,
data.test,
n.trees=tree.list,
"response")
#Calculate the deviance for all the results
pred.dev.tc1.lr001 <- rep(0,200)
for (i in 1:200) {
pred.dev.tc1.lr001[i] <- calc.deviance(data.test[,1],
pred.tc1.lr001[,i],
calc.mean=TRUE)
}