此eval解析代码的替代方法是什么?

时间:2019-09-10 18:25:32

标签: r eval

我正在向别人的自定义R包中插入一些代码,但我没有灵活性来编写自己想要的代码。

我需要能够按照我可以通过公式重新创建的类似格式来汇总许多变量。

我正在寻找一种更有效的书写方式。效率非常重要,因为要处理的数据很多。

这里是示例代码,显示了我想做什么,但是它又慢又笨拙。我知道eval-parse并不是执行此操作的最佳方法,这就是为什么我要寻求更好的方法:-)

v1 <- 1
v2 <- 2
v3 <- 3
v4 <- 4

# this for loop works, but it is clunky and slow
string <- character()
for (i in 1:4) {
  if (i < 4) string <- c(string, paste0("v",i,"+"))
  else string <- c(string, paste0("v",i))
}
eval(parse(text=string))

2 个答案:

答案 0 :(得分:2)

我们可以在获取Reduce中的对象值之后使用list

Reduce(`+`, mget(paste0("v", 1:4)))

答案 1 :(得分:0)

既然您谈论公式,也许reformulate()会有所帮助

reformulate(paste0("v",1:4))
#> ~v1 + v2 + v3 + v4

您可以使用以下命令获得预期的输出,尽管在这种情况下,它的效率和直观性都比@akrun的方法低:

eval(reformulate(paste0("v",1:4))[[2]])
#> [1] 10