【发布时间】:2021-07-28 17:01:04
【问题描述】:
我想生成一个数据框,其中每一行都由几个属性的叉积函数给出。 这可以强制完成:
seed <- expand.grid(
c(1,2,3),
c(4,5,6)
)
d <- data.frame()
for(i in 1:nrow(seed)) {
d[i,"prop1"] = f(seed[i,])
d[i,"prop2"] = g(seed[i,])
}
其中f 和g 是函数。但我更喜欢功能版本。我尝试使用pmap:
pmap(seed, ~ data.frame(
prop1 = f(..1, ..2),
prop2 = g(..1, ..2))
)
但这并没有给我一个数据框。有没有一种(有效的)方法可以在没有循环的情况下做到这一点?
【问题讨论】:
-
f和g是做什么的? -
你最好的选择是用一些聪明的矩阵代数替换这些函数。我不知道这是否可能,因为您还没有共享功能。
-
f 和 g 是任意函数,没有返回单个值的副作用。我需要一个内部结构无关紧要的解决方案。
-
您对问题的约束越多,解决方案的效率就越高。对于任意函数,解释语言只能做这么多。默认情况下,R 已经激活了 JIT 字节编译。如果您不愿意对此进行更多限制,我相信如果您不愿意优化函数的实现并在 Rcpp 中理想地实现您的函数,那么您将不走运。
标签: r dataframe functional-programming