在 R 中使用非常长的字符串创建公式

Creating formula using very long strings in R

我的情况是,我有一个包含非常大数据框的列名的向量。

假设:x = c("Name", "address", "Gender", ......, "class" ) [大约 100 个变量]

现在,我想创建一个公式,我最终会用它来创建 HoeffdingTree。 我正在使用以下公式创建公式:

myformula <- as.formula(paste("class ~ ", paste(x, collapse= "+")))

这会引发以下错误:

Error in parse(text = x) : :1:360: unexpected 'else' 1:e+spread+prayforsonni+just+want+amp+argue+blxcknicotine+mood+now+right+actually+herapatra+must+simply+suck+there+always+cookies+ever+everything+getting+nice+nigga+they+times+abu+all+alliepickl

上述语句中的 paste 部分工作正常,但将其作为参数传递给 as.formula 会引发各种奇怪的问题。

您可以先减少数据集

dat_small <- dat[,c("class",x)]

然后使用

myformula <- as.formula("class ~ .")

. 表示使用所有其他(除了 class)列。

问题是您将 R 关键字作为列名。 else 是关键字,因此您不能将其用作常规名称。

一个简化的例子:

s <- c("x", "else", "z")
f <- paste("y~", paste(s, collapse="+"))
formula(f)
# Error in parse(text = x) : <text>:1:10: unexpected '+'
# 1: y~ x+else+
#              ^

解决方案是用反引号“`”包裹您的单词,这样 R 会将它们视为非句法变量名。

f <- paste("y~", paste(sprintf("`%s`", s), collapse="+"))
formula(f)
# y ~ x + `else` + z

你可以试试reformulate

 reformulate(setdiff(x, 'class'), response='class')
 #class ~ Name + address + Gender

其中 'x' 是

  x <- c("Name", "address", "Gender", 'class')

如果R关键字在'x',你可以做

   reformulate('.', response='class')
   #class ~ .