R 这个eval解析代码的替代方案是什么?

R 这个eval解析代码的替代方案是什么?,r,eval,R,Eval,我正在将一些代码插入到其他人的定制R包中,但我没有灵活的编写方式 我需要能够按照我可以用公式重新创建的类似格式总结许多变量 我正在寻找一种更有效的方法来写这篇文章。效率很重要,因为有很多数据需要处理 下面是显示我想做什么的示例代码,但它既慢又笨重。我知道eval解析并不是最好的方法,这就是为什么我要求更好的方法:-) v1在获取列表中的对象值后,我们可以使用Reduce Reduce(`+`, mget(paste0("v", 1:4))) 既然您谈到了公式,也许reformate()会有所帮

我正在将一些代码插入到其他人的定制R包中,但我没有灵活的编写方式

我需要能够按照我可以用公式重新创建的类似格式总结许多变量

我正在寻找一种更有效的方法来写这篇文章。效率很重要,因为有很多数据需要处理

下面是显示我想做什么的示例代码,但它既慢又笨重。我知道eval解析并不是最好的方法,这就是为什么我要求更好的方法:-)


v1在获取
列表中的对象值后,我们可以使用
Reduce

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

既然您谈到了公式,也许
reformate()
会有所帮助

重新格式化(粘贴0(“v”,1:4))
#>~v1+v2+v3+v4
您可以通过使用以下方法获得预期的输出,但在这种情况下,它的效率和直观性不如@akrun的方法:

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

看起来像
Reduce(“+”,mget(paste0(“v”,1:4)))
您在找什么?1)不需要循环来形成字符串:
paste0(“v”,1:4,collapse=“+”
)。2) @akrun的
Reduce
的替代方法可以是
Reduce(“+”,mget(ls(pattern=“^v\\d+$”))
。akrun的答案很完美,谢谢!!感谢d.b,当我有机会的时候,我将不得不对这些方法与Reduce解决方案进行基准测试
eval(reformulate(paste0("v",1:4))[[2]])
#> [1] 10