R中的as.formula似乎不接受以数字后跟_开头的名称

lea*_*ner 1 r formula

如何避免出现以下错误.as.formula()似乎不接受以数字开头并后跟_(下划线)的变量.我正在动态生成这些变量,我处于一个我不想返回并更改变量名称的阶段.谢谢

lhsOfFormula = "25_dep"
rhsOfFormula  = "predVar1+predVar2+10_predVar3"
as.formula(paste(lhsOfFormula , " ~ ", rhsOfFormula ))
Run Code Online (Sandbox Code Playgroud)

错误:

> as.formula(paste(lhsOfFormula , " ~ ", rhsOfFormula ))
Error in parse(text = x) : <text>:1:3: unexpected input
1: 25_
     ^
Run Code Online (Sandbox Code Playgroud)

Aar*_*ica 7

你需要在反引号中包装名称,就像这样

> lhsOfFormula <- "25_dep"
> rhsOfFormula <- c("predVar1", "predVar2", "10_predVar3")
> addq <- function(x) paste0("`", x, "`")
> as.formula(paste(addq(lhsOfFormula) , " ~ ", paste(addq(rhsOfFormula),collapse=" + " )))
`25_dep` ~ predVar1 + predVar2 + `10_predVar3`
Run Code Online (Sandbox Code Playgroud)

我还隐约记得有一个函数可以帮助创建公式formulate,也许是吗?但是在我的快速搜索中我找不到任何关于它的信息.

编辑:感谢@DWin,它reformulate有助于响应而不是预测变量.这里RHS被更改为具有有效名称,以便代码可以工作:

> lhsOfFormula = "25_dep"
> rhsOfFormula  = c("predVar1", "predVar2", "x10_predVar3")
> reformulate(rhsOfFormula, lhsOfFormula)
`25_dep` ~ predVar1 + predVar2 + x10_predVar3
Run Code Online (Sandbox Code Playgroud)

编辑:直接将公式应用于数据框将自动添加反引号,使用第一列作为响应

> d <- data.frame(`25_dep`=1:5, predvar1=1:5, predvar2=1:5, `10_predvar3`=1:5, 
                  check.names=FALSE)
> formula(d)
`25_dep` ~ predvar1 + predvar2 + `10_predvar3`
Run Code Online (Sandbox Code Playgroud)

stats:::formula.data.frame可以调整该函数()的代码; 它使用as.name如下:

> lhsOfFormula <- "25_dep"
> rhsOfFormula <- c("predVar1", "predVar2", "10_predVar3")
> ns <- sapply(c(lhsOfFormula, rhsOfFormula), as.name)
> formula(paste(ns[1], paste(ns[-1], collapse="+"), sep=" ~ "))
`25_dep` ~ predVar1 + predVar2 + `10_predVar3`
Run Code Online (Sandbox Code Playgroud)