【问题标题】:RandomForest Package Error in R: $ operator is invalid for atomic vectorsR 中的 RandomForest 包错误:$ 运算符对原子向量无效
【发布时间】:2015-05-27 03:41:36
【问题描述】:

我正在尝试创建一个随机森林多类分类器。但是,当我执行我的代码时,我在调用 RandomForest 时收到以下错误:

结果$training_classes 中的错误: $ 运算符对原子向量无效 调用:randomForest ... eval -> model.frame -> model.frame.default -> eval -> eval 执行停止

这是我的代码:

#!/usr/bin/Rscript
library(randomForest);
library(tm)
training_classes <- readLines("incidents_training_classes.txt",)
training_data <- readLines("incidents_training_words.txt")
doc.vec <- VectorSource(training_data)
doc.corpus <- Corpus(doc.vec)
summary(doc.corpus)
doc.corpus <- tm_map(doc.corpus, removeNumbers)
doc.corpus <- tm_map(doc.corpus, removeWords, stopwords("english"))
DTM <- DocumentTermMatrix(doc.corpus, control=list(weighting=weightTfIdf,minWordLength=3))
DTM.common <- removeSparseTerms(DTM,.99)
# Convert DTM to a data frame
capture.output(DTM.dataframe <- as.data.frame(inspect(DTM.common))) -> .null
class.dataframe <- as.data.frame(training_classes, stringsAsFactors=TRUE) 
# Merge predictor variables and class labels
results <- cbind(DTM.dataframe,class.dataframe)
forest.rf <- randomForest( results$training_classes ~ .,importance=TRUE, data = results, ntree = 500);

结果数据框具有预期的尺寸。我倒在了谷歌上,没有任何运气。

非常感谢任何帮助。

【问题讨论】:

  • R formula(正确使用)中很少有“$”。 str(results) 显示什么?
  • 这是我的结构调用的顶部:The metadata consists of 2 tag-value pairs and a data frame Available tags are: create_date creator Available variables in the data frame are: MetaID 'data.frame': 8271 obs. of 813 variables: $ able : num 0 0 0.0171 0 0 ... $ accept : num 0 0 0 0 0 ... $ access : num 0 0 0 0 0 0 0 0 0 0 ... $ accessing : num 0 0 0 0 0 0 0 0 0 0 ... $ account : num 0 0 0 0 0 0 0 0 0 0 ...
  • 这里是 str() 调用的底部:$ yes : num 0 0 0 0 0 0 0 0 0 0 ... $ yesterday : num 0 0 0 0 0 0 0 0 0 0 ... $ yet : num 0 0 0 0 0 0 0 0 0 0 ... $ training_classes: Factor w/ 8 levels "B","C","D","G",..: 8 7 8 7 2 5 7 8 7 2 ...
  • 在我看来,“结果”对象比数据框更复杂。它不适合作为 randomForest 数据参数的参数。
  • is.data.frame(result) 的输出为:[TRUE]。我之前没有使用过文档术语矩阵。我通常使用 sed/awk 等来清理数据,然后将文本作为表格读取。在这种情况下,我使用的是 DTM。据我所知,DTM 不能包含类标签。

标签: r


【解决方案1】:

如果您指定数据 = 结果,则不需要 $ 符号。试试:

fmla <- as.formula(training_classes ~.)
results$training_classes <- as.factor(results$training_classes)

forest.rf <- randomForest(fmla,importance=TRUE, data = results, ntree = 500);

应该立即解决问题。

此外,自变量不应包含任何 NA。还请分享“str(results)”的输出。森林中使用的因子变量不应超过 32 个类,请记住这一点。

【讨论】:

  • 感谢您的反馈,但您的建议如下:Error in eval(expr, envir, enclos) : object 'else' not found Calls: randomForest ... randomForest.formula -&gt; model.frame -&gt; model.frame.default -&gt; eval -&gt; eval Execution halted
  • str(results) 的结果在另一条评论中。
【解决方案2】:

尝试在公式中仅使用 data.frame 的列名,例如 training_classes ~ .。检查列名是否使用 colnames(results) 正确设置。或者,您可以尝试x=, y= 参数而不是公式,请参阅?randomForest

【讨论】:

  • 感谢您的反馈,但您的建议如下:Error in eval(expr, envir, enclos) : object 'else' not found Calls: randomForest ... randomForest.formula -&gt; model.frame -&gt; model.frame.default -&gt; eval -&gt; eval Execution halted
  • 您能发布head(results) 和您的新randomForest 通话的输出吗?
  • 嗨。有 813 个变量,因此发布 head() 的完整输出是不可能的。下面是显示 training_classes 功能的输出底部:yesterday yet training_classes 1 0 0 W 2 0 0 P 3 0 0 W 4 0 0 P 5 0 0 C 6 0 0 H 这是我的 randomForest 调用:myforest.rf
猜你喜欢
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2021-08-20
相关资源
最近更新 更多