你需要用反引号包裹名字,像这样
> 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`
我还隐约记得有一个函数可以帮助创建公式,比如formulate
,也许?但是我在快速搜索中找不到任何关于它的信息。
编辑:感谢@DWin,它reformulate
有助于响应,但对预测变量没有帮助。此处将 RHS 更改为具有有效名称,以便代码正常工作:
> lhsOfFormula = "25_dep"
> rhsOfFormula = c("predVar1", "predVar2", "x10_predVar3")
> reformulate(rhsOfFormula, lhsOfFormula)
`25_dep` ~ predVar1 + predVar2 + x10_predVar3
编辑:将公式直接应用于数据框将自动添加反引号,使用第一列作为响应
> 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`
该函数 ( 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`