从数据框列名称创建公式

时间:2015-09-25 22:18:11

标签: r paste numeric

我试图找到一种格式化数字函数的方法,通过拆分变量并在它们之间添加数学运算符。像

这样的东西
y <- data.frame(1:5, 2:6, 3:7,4:8)
names(y) <- c('a', 'b', 'c', 'd')

并将其转换为如下所示的公式:

~a+b+c+d

我试过了:

x <-c(y)
z <- paste('a', 'b', 'c', 'd', sep='+')
as.numeric(as.character(z))

它不起作用,我很确定它是因为&#34;字符&#34;分隔符I使用。我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

> paste(names(y), collapse='+')
[1] "a+b+c+d"

您使用的参数是sep。你应该使用collapse参数。希望有所帮助。

答案 1 :(得分:0)

在这两个答案的基础上......

...如果你想要表达式:

parse(text = paste(names(y), collapse='+')) -> expr

...如果您想要评估结果:

eval(expr, envir = y)

...如果您想了解更多信息:Non-standard evaluation by Wickham

答案 2 :(得分:0)

你的第二次尝试非常接近,如果你用&#34; [[&#34;而不是&#34; [&#34;

> with( y, a+b+c+d)
[1] 10 14 18 22 26
> y[[1]]+y[[2]]+y[[3]]+y[[4]]
[1] 10 14 18 22 26

它与&#34; +&#34; -separator无关,它是矢量化的,这就是你想要的,但在第一种情况下与查找正确的函数以允许表达式{ {1}}在适当的数据环境中进行评估。

对于公式对象....:

a+b+c+d