运行 randomForest 中的错误:找不到对象
Error in running randomForest : object not found
所以我正在尝试为我的数据集拟合一个随机森林分类器。我是 R 的新手,我想这是一个简单的格式问题。
我读入了一个文本文件并转换了我的数据集,所以它是这种格式:(取出机密信息)
>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
本质上,列是我的特征,行是我的样本,最后一列是我的响应向量,它是一列因子,resp.
然后我使用:
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
现在,当我们训练随机森林时,我们得到指示的错误:
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)
现在模型训练没有错误。
简而言之,
这是一个非常新手的错误,我输入的是矩阵而不是导致此错误的 data.frame。为什么它抱怨那个特定的专栏(这不是第一个)与另一个我仍然不明白。
感谢所有的帮助。
干杯,
安东尼
所以我正在尝试为我的数据集拟合一个随机森林分类器。我是 R 的新手,我想这是一个简单的格式问题。
我读入了一个文本文件并转换了我的数据集,所以它是这种格式:(取出机密信息)
>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
本质上,列是我的特征,行是我的样本,最后一列是我的响应向量,它是一列因子,resp.
然后我使用:
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
现在,当我们训练随机森林时,我们得到指示的错误:
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)
现在模型训练没有错误。
简而言之, 这是一个非常新手的错误,我输入的是矩阵而不是导致此错误的 data.frame。为什么它抱怨那个特定的专栏(这不是第一个)与另一个我仍然不明白。 感谢所有的帮助。 干杯, 安东尼