【发布时间】:2020-01-04 00:29:44
【问题描述】:
我正在将一些代码插入到其他人的自定义 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))
【问题讨论】:
-
看起来像
Reduce("+", mget(paste0("v", 1:4))) -
您在寻找this吗?
-
1) 您不需要循环来形成字符串:
paste0("v", 1:4, collapse = "+")。 2) @akrun 的Reduce的替代品可以是Reduce("+", mget(ls(pattern = "^v\\d+$")))。 -
akrun的回答很完美,谢谢!!
-
感谢 d.b,当我有机会时,我将不得不对这些方法与 Reduce 解决方案进行基准测试