在R中使用公式中具有特殊字符的列

时间:2012-02-14 06:06:40

标签: r special-characters

我正在尝试使用具有~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公式?

3 个答案:

答案 0 :(得分:6)

这有效:

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  

答案 1 :(得分:2)

Joran对我的问题的评论是答案 - 我不知道make.names()的存在

乔兰,如果你作为答案回答,我会把你标记为正确。干杯!

答案 2 :(得分:0)

我只是遇到了同样的问题,将名称传递给R公式时,我不希望名称发生任何变化。 R允许非语法列名带有反引号。因此,我尝试在名称中添加反引号,效果也很好。我的代码如下:

lapply(colnames(variable), function(gene){
formula0 <- paste0("gleason_grade", "~" "`", gene, "`")
logit <- clm(as.formula(formula0), data = mydata)
})

现在您可以将新变量无误地传递给公式了。
如果您不希望像我一样对该变量进行任何更改,那么只需对它进行打勾。