问题描述
我是编码的新手,我正在尝试构建数据树,但是我仍然遇到相同的错误:
错误 model.frame.default(formula = df〜df $ Open.Closed + df $ Region,: 变量“ df”的类型(列表)无效
我浏览了整个站点,但找不到有效的解决方案。我尝试了多种解决方案,但通常会遇到另一个错误,即数据是矩阵,该部分将不接受。任何帮助将不胜感激。
这是我的代码:
library(rpart.plot)
library(ggExtra)
library(gridExtra)
library(RGtk2)
library(rpart)
library(rattle)
df[] <- data.frame(lapply(Test_Bank_Model,factor))
df [col_names] <- lapply(df[col_names],factor)
str(df)
summary(df)
print(df)
tree <- rpart(df ~ df$Open.Closed + df$Region,data = df,method = "class",model = TRUE,control = rpart.control("minsplit" = 1))
rpart.plot(tree,roundint = FALSE,Box.palette = "white")
Data:
Region
Closing.Date
Annual.Average.FedFunds
Open.Closed
1 South 2020 0.2328571 Closed
2 Mid West 2020 0.2328571 Closed
3 north East 2020 0.2328571 Open
4 South 2020 0.2328571 Open
5 north East 2020 0.2328571 Open
6 West 2020 0.2328571 Open
7 north East 2020 0.2328571 Open
8 north East 2019 1.7366667 Closed
9 South 2019 1.7366667 Closed
10 Mid West 2019 1.7366667 Closed
解决方法
从错误消息中,我认为您在需要数据框时正在使用列表对象。
lapply
以列表的形式返回结果。我认为那是格式更改未引起注意的地方。
我制作了一个名为“ Test_Bank_Model”的数据框,获取了列名,并排除了“ Annual.Average.FedFunds”转换为因数(我不确定您想对年份做什么)。
在rpart
中,您可以像以前一样通过data参数指定data.frame。当您这样做时,可以省去自己重新键入数据帧名称的麻烦(但我不知道这是有问题的;它也应该起作用)。
Test_Bank_Model <- data.frame(Region = c("South","Mid West","North East","South","West","South"),Closing.Date = c(rep(2020,7),2019,2019),Annual.Average.FedFunds = c(0.2328571,0.2328571,1.7366667,1.7366667),Open.Closed = c("Closed","Closed","Open","Closed"))
col_names <- colnames(Test_Bank_Model)[-3]
Test_Bank_Model[,col_names] <- as.data.frame(lapply(Test_Bank_Model[,col_names],FUN=as.factor))
str(Test_Bank_Model)
# 'data.frame': 9 obs. of 4 variables:
# $ Region : Factor w/ 4 levels "Mid West",..: 3 1 2 3 2 4 2 2 3
# $ Closing.Date : Factor w/ 2 levels "2019","2020": 2 2 2 2 2 2 2 1 1
# $ Annual.Average.FedFunds: num 0.233 0.233 0.233 0.233 0.233 ...
# $ Open.Closed : Factor w/ 2 levels "Closed","Open": 1 1 2 2 2 2 2 1 1
tree <- rpart(Annual.Average.FedFunds ~ Open.Closed + Region,data = Test_Bank_Model,method = "class",model = TRUE,control = rpart.control("minsplit" = 1))
rpart.plot(tree,roundint = FALSE,box.palette = "white")