我的情况是,我的数据框中有一个非常大的数据框的列名。
我们假设:x = c("Name", "address", "Gender", ......, "class" )
[大约100个变量]
现在,我想创建一个我最终用来创建HoeffdingTree
的公式。
我正在使用以下方法创建公式:
myformula <- as.formula(paste("class ~ ", paste(x, collapse= "+")))
这会引发以下错误:
解析时出错(text = x):: 1:360:意外'其他' 1:E +蔓延+ prayforsonni +只是+需要+功放+争辩+ blxcknicotine +心情+现在+右+实际上+ herapatra +一定+简单+吸+有+总是+饼干+有史以来+家居+让+漂亮+黑人+它们+倍+阿布+ +所有alliepickl
上述语句中的paste
部分工作正常,但将其作为参数传递给as.formula
会引发各种奇怪的问题。
答案 0 :(得分:9)
问题是你有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
答案 1 :(得分:2)
您可以先减少数据集
dat_small <- dat[,c("class",x)]
然后使用
myformula <- as.formula("class ~ .")
.
表示使用所有其他(除了类)之外的所有列。
答案 2 :(得分:1)
您可以尝试reformulate
reformulate(setdiff(x, 'class'), response='class')
#class ~ Name + address + Gender
其中'x'是
x <- c("Name", "address", "Gender", 'class')
如果R关键字在'x'中,则可以
reformulate('.', response='class')
#class ~ .