在 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 ~ .
我的情况是,我有一个包含非常大数据框的列名的向量。
假设: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 ~ .