运行randomForest时出错:找不到对象

时间:2016-01-29 00:07:49

标签: r machine-learning random-forest

所以我想为我的数据集拟合一个随机森林分类器。我是R的新手,我想这是一个简单的格式化问题。

我在一个文本文件中读取并转换我的数据集,因此它采用以下格式:(取出机密信息)

cin >> num1 >> num2>> num3; 

本质上,列是我的特征,行是我的样本,最后一列是我的响应向量,它是一列因子,分别为

然后我用:

>head(df.train,2)

   GOLGA8A     ITPR3   GPR174  SNORA63    GIMAP8     LEF1    PDE4B LOC100507043    TGFB1I1    SPINT1
Sample1  3.726046 3.4013711 3.794364 4.265287 -1.514573 7.725775 2.162616    -1.514573 -1.5145732 -1.514573
Sample2 4.262779 0.9261892 4.744096 7.276971 -1.514573 4.694769 4.707387     2.031476 -0.8325444  2.615991
...
...
CD8B     FECH    PYCR1 MGC12916     KCNA3 resp
Sample1  -1.514573 2.099336 3.427928 1.542951 -1.514573    1
Sample2 -1.145806 1.204241 2.846832 1.523808  1.616791    1

只需尝试使用其他列作为功能在我的列set.seed(1) #Set the seed in order to gain reproducibility RF1 = randomForest(resp~., data=df.train,ntree=1000,importance=T,mtry=3) 上训练RF。

但我得到了错误:

resp

然而,在查看我的训练集时,我可以清楚地找到该列,例如:

Error in eval(expr, envir, enclos) : object 'PCNA-AS1' not found

所以我真的不明白错误或从哪里开始。如果我没有以正确的方式提出问题,我表示歉意,感谢您的帮助!

2 个答案:

答案 0 :(得分:12)

我怀疑这是因为你的数据框中有一个非法的变量名。让我们考虑一个只有响应变量resp和变量(非法)名为PCNA-AS1的数据框:

(dat <- structure(list(`PCNA-AS1` = c(1, 2, 3), resp = structure(c(2L, 2L, 1L), .Label = c("0", "1"), class = "factor")), .Names = c("PCNA-AS1", "resp"), row.names = c(NA, -3L), class = "data.frame"))
#   PCNA-AS1 resp
# 1        1    1
# 2        2    1
# 3        3    0

现在,当我们训练一个随机森林时,我们得到指示的错误:

library(randomForest)
mod <- randomForest(resp~., data=dat)
# Error in eval(expr, envir, enclos) : object 'PCNA-AS1' not found

解决此问题的一个自然方法是将您的变量名转换为合法名称:

names(dat) <- make.names(names(dat))
dat
#   PCNA.AS1 resp
# 1        1    1
# 2        2    1
# 3        3    0
mod <- randomForest(resp~., data=dat)

现在模型训练没有错误。

答案 1 :(得分:-2)

总之, 这是一个非常新的错误,我正在输入矩阵而不是data.frame导致此错误。为什么它抱怨那个特定的专栏(这不是第一个)与另一个我仍然不理解的专栏。 谢谢你的帮助。 干杯, 安东尼