我正在尝试使用具有约200列的数据帧的rpart来创建决策树。其中某些列的名称中带有数字,有些则带有特殊字符(例如“ /”)。当我尝试生成树时,出现如下错误:
R> gg.rpart <- rpart(nospecialchar ~ Special/char, data=temp, method="class")
Error in eval(expr, envir, enclos) : object 'Special' not found
R> gg.rpart <- rpart(nospecialchar ~ "Special/char", data=temp, method="class")
Error in terms.formula(formula, data = data) : invalid model formula in ExtractVars
R> gg.rpart <- rpart(nospecialchar ~ `Special/char`, data=temp, method="class")
Error in `[.data.frame`(frame, predictors) : undefined columns selected
我必须更改名称以容纳R还是有某种方法可以将带有特殊字符的列名称传递给R公式?
此作品:
dat <- data.frame(M=rnorm(10),'A/B'=1:10,check.names=F)
> lm(M~`A/B`,dat)
Call:
lm(formula = M ~ `A/B`, data = dat)
Coefficients:
(Intercept) `A/B`
-1.0494 0.1214
Joran对我的问题的评论是答案-我不知道是否存在make.names()
Joran,如果您回答作为答复,我会标记为正确。干杯!
我只是遇到了同样的问题,将名称传递给R公式时,我不希望名称发生任何变化。 R允许非语法列名带有反引号。因此,我尝试在名称中添加反引号,效果也很好。我的代码如下:
lapply(colnames(variable), function(gene){
formula0 <- paste0("gleason_grade", "~" "`", gene, "`")
logit <- clm(as.formula(formula0), data = mydata)
})
现在您可以将新变量无误地传递给公式。如果您不希望像我一样对该变量进行任何更改,请反选它。