我试图找到一种格式化数字函数的方法,通过拆分变量并在它们之间添加数学运算符。像
这样的东西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使用。我该怎么做呢?
答案 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