我在R中制作回归树时遇到问题。我有一个包含17个属性的数据框
library(rpart)
rt.model <- rpart(razlika ~ ., learn)
我收到错误:
Error in `[.data.frame`(frame, predictors) : undefined columns selected
看起来很奇怪,因为我用一个非常类似的数据库做了类似的事情。您可以在http://uploading.com/files/de8a966d/exa.Rda/上下载数据框 - 然后加载
load("exa.Rda")
答案 0 :(得分:20)
我认为问题不是你有一个矩阵而不是数据框。当我下载然后加载数据集时,我得到一个数据框,而不是矩阵。
问题是列名中包含错误的字符。使用gsub
从列名中删除字符“ - ”,“”,“(”和“)”。或者,您只需使用colnames
完全重新定义列名称。
或者像ulvund一样,只需调用data.frame
,这会强制R为您清理列名称。
当我这样做时,rpart
运行得很好。
答案 1 :(得分:4)
将学习矩阵转换为数据框。
示例:
load("exa.Rda")
library(rpart)
learn <- data.frame(learn)
rt.model <- rpart(razlika ~ ., learn)
rt.model
的产率:
n= 226
node), split, n, deviance, yval
* denotes terminal node
1) root 226 31417.5100 3.3849560
2) B.reb>=40.80799 117 12661.2300 0.4871795
4) B.ft>=0.7666193 31 2685.4190 -5.7741940
8) A.fg2< 0.4645683 22 1846.7730 -8.3181820
16) A.ft< 0.7464692 7 365.4286 -14.2857100 *
17) A.ft>=0.7464692 15 1115.7330 -5.5333330 *
9) A.fg2>=0.4645683 9 348.2222 0.4444444 *
5) B.ft< 0.7666193 86 8322.3720 2.7441860
10) B.avg.conceded.< 98.19592 76 7255.6320 1.7105260
20) A.reb< 39.29941 19 1520.6320 -3.5789470 *
21) A.reb>=39.29941 57 5026.2110 3.4736840
42) A.3pt< 0.3945418 35 2500.1710 0.7714286
84) A.ft< 0.7460665 17 1270.2350 -2.4705880 *
85) A.ft>=0.7460665 18 882.5000 3.8333330 *
43) A.3pt>=0.3945418 22 1863.8640 7.7727270
86) B.ft>=0.7214165 13 718.9231 4.0769230 *
87) B.ft< 0.7214165 9 710.8889 13.1111100 *
11) B.avg.conceded.>=98.19592 10 368.4000 10.6000000 *
3) B.reb< 40.80799 109 16719.2500 6.4954130
6) A.fouls>=24.51786 23 2349.9130 -2.2173910
12) A.fg2< 0.4551468 16 1266.0000 -5.5000000 *
13) A.fg2>=0.4551468 7 517.4286 5.2857140 *
7) A.fouls< 24.51786 86 12156.3800 8.8255810
14) B.fouls< 22.80863 24 3271.9580 2.5416670
28) A.3pt< 0.3738479 9 626.0000 -6.0000000 *
29) A.3pt>=0.3738479 15 1595.3330 7.6666670 *
15) B.fouls>=22.80863 62 7569.8710 11.2580600
30) A.fouls< 22.32999 18 1650.5000 5.5000000 *
31) A.fouls>=22.32999 44 5078.4320 13.6136400
62) A.ft.drawn>=29.18849 7 208.8571 3.8571430 *
63) A.ft.drawn< 29.18849 37 4077.1890 15.4594600
126) A.fg2< 0.4588535 18 1696.5000 11.5000000 *
127) A.fg2>=0.4588535 19 1831.1580 19.2105300 *
答案 2 :(得分:2)
如果列名是整数(1:N),即使它们存储为字符,也会发生这种情况。