首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R插入符号包(rpart)

R插入符号包(rpart)
EN

Stack Overflow用户
提问于 2015-10-20 21:42:27
回答 1查看 687关注 0票数 0

使用rpart库时出现以下错误

代码语言:javascript
复制
dt <- rpart(formula, method="class", data=full.df.allAttr.train);

Error in model.frame.default(formula = formula, data = full.df.allAttr.train,  : 
  object is not a matrix

当我转换full.df.allAttr.trainto矩阵时

代码语言:javascript
复制
dt <- rpart(formula, method="class", data= as.matrix( full.df.allAttr.train));

Error in model.frame.default(formula = formula, data = as.matrix(full.df.allAttr.train),  : 
  'data' must be a data.frame, not a matrix or an array

当我检查类类型时,它是一个数据框

代码语言:javascript
复制
class(full.df.allAttr.train)

[1] "data.frame"

感谢您的输入,当我使用正确的列名创建了包含结果的公式时,错误就停止了。

代码语言:javascript
复制
measurevar <- "SpeakerName"
formula_str <- paste(measurevar, paste(rowNames, collapse=" + "), sep=" ~ ")
formula <- as.formula(formula_str) 

它会显示不同的错误,因为我的数据框包含row.names,因为下面的文本是快照

代码语言:javascript
复制
Error in model.frame.default(formula = formula, data = full.df.train,  : 
  variable lengths differ (found for 'character(0)')

抱歉,这是个新手,我将添加完整的源代码和数据集。

代码语言:javascript
复制
library(tm)
library(rpart)
obamaCorpus <- Corpus(DirSource(directory = "D:/R/Chap 6/Speeches/obama" , encoding="UTF-8"))
romneyCorpus <- Corpus(DirSource(directory = "D:/R/Chap 6/Speeches/romney" , encoding="UTF-8"))
fullCorpus <- c(obamaCorpus,romneyCorpus)#1-22 (obama), 23-44(romney)
fullCorpus.cleansed <- tm_map(fullCorpus, removePunctuation)
fullCorpus.cleansed <- tm_map(fullCorpus.cleansed, stripWhitespace)
fullCorpus.cleansed <- tm_map(fullCorpus.cleansed, tolower)
fullCorpus.cleansed <- tm_map(fullCorpus.cleansed, removeWords, stopwords("english"))
fullCorpus.cleansed <- tm_map(fullCorpus.cleansed, PlainTextDocument)
#fullCorpus.cleansed <- tm_map(fullCorpus.cleansed, stemDocument)

full.dtm <- DocumentTermMatrix(fullCorpus.cleansed)
full.dtm.spars <- removeSparseTerms(full.dtm , 0.6)

full.matix <- data.matrix(full.dtm.spars)
full.df <- as.data.frame(full.matix)

full.df[,"SpeakerName"] <- "obama"
full.df$SpeakerName[21:44] <- "romney"

train.idx <- sample(nrow(full.df) , ceiling(nrow(full.df)* 0.6))
test.idx <- (1:nrow(full.df))[-train.idx]
rowNames <- colnames(full.df)

measurevar <- "SpeakerName"
formula_str <- paste(measurevar, paste(rowNames, collapse=" + "), sep=" ~ ")
formula <- as.formula(formula_str)
dt <- rpart(formula, method="class", data=full.df.train);

在最后一步失败

数据集在这里https://drive.google.com/folderview?id=0B1SogodTE-kJSHF6aFRmQURsV0U&usp=sharing

EN

回答 1

Stack Overflow用户

发布于 2016-04-16 05:29:43

您忘记了包含full.df.train,并且您的公式不正确。

这将会起作用:

代码语言:javascript
复制
full.df.train <- full.df[train.idx, ]
dt <- rpart(SpeakerName ~ ., method = "class", data = full.df.train)

你的公式的问题是你在~的两边都包含了SpeakerName。如果您想使用所有变量,使用.表达式要容易得多,而且简洁得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33238324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档