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

运行randomForest时出错:找不到对象,r,machine-learning,random-forest,R,Machine Learning,Random Forest,因此,我试图为我的数据集安装一个随机森林分类器。我对R非常陌生,我想这是一个简单的格式问题 我读入一个文本文件并转换我的数据集,使其采用这种格式:(取出机密信息) 本质上,列是我的特征,行是我的样本,最后一列是我的响应向量,它是一列因子,分别是 然后我使用: set.seed(1) #Set the seed in order to gain reproducibility RF1 = randomForest(resp~., data=df.train,ntree=1000,importan

因此,我试图为我的数据集安装一个随机森林分类器。我对R非常陌生,我想这是一个简单的格式问题

我读入一个文本文件并转换我的数据集,使其采用这种格式:(取出机密信息)

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

然后我使用:

set.seed(1) #Set the seed in order to gain reproducibility

RF1 = randomForest(resp~., data=df.train,ntree=1000,importance=T,mtry=3)
只需尝试在我的专栏
resp
中使用其他专栏作为功能来训练RF

但我得到了一个错误:

Error in eval(expr, envir, enclos) : object 'PCNA-AS1' not found
然而,通过查看我的培训资料,我可以清楚地找到该专栏,例如:

sort(unique(colnames(df.train))

所以我真的不明白这个错误,也不知道该怎么办。如果我没有以正确的方式提出问题,我深表歉意,谢谢您的帮助

我怀疑这是因为数据帧中有非法的变量名。让我们考虑一个数据帧,它只有一个响应变量<代码> 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
简而言之, 这是一个新手犯的错误,我输入的是一个矩阵,而不是导致这个错误的data.frame。我仍然不明白为什么它会抱怨这个特定的列(这不是第一个),而不是另一个。 谢谢你的帮助。 干杯
Anthony

你能把这作为一个可重复的例子吗(也就是为导致错误的
df.train
提供样本数据)?感谢你的评论Josilber,我尝试转换为合法名称,但这不是问题。错误实际上是我给了randomForest一个矩阵(而不是一个数据框)我认为这无关紧要,randomForest可以很容易地在两者之间转换。但我错了,所以我现在解决了这个问题。@AHawks OK,那么你就更有理由编辑你的问题,使其可复制!(也就是说,包括复制问题所需的代码和数据)。尝试将数据框中的列减少到可以重现问题的最小数目,然后发布该数据集(如果您尚未了解首先发生了什么).是的,你肯定是对的,那会更好,我会在以后的问题中这样做,只是习惯于在这里介绍堆栈溢出的问题,所以谢谢你的建议!创建/转换data.frame时,请检查.names=TRUE。因此输入data.frame可以修复问题,因为非法的列名称会被编辑。在与Matrix相比,general randomForest提供的data.frame问题要少得多。这不是答案,而是对真实答案的评论,应该标记为已接受。
(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)