【发布时间】:2018-03-16 18:04:44
【问题描述】:
我在 R 中有一个函数,比如TVP()。这不是我自己的函数,我在有关贝叶斯模拟的 R 包中使用它。它返回一个包含多个值的列表:
tvp<-function(...) {
.
.
.
return(list(A,B,C,...) }
由于我的函数是用于大量迭代的模拟函数,例如R=10000 或 50000,它的运行时间很大,也需要更大的容量。例如,在 R=50000 中,如果要保存所有值,则需要 3.5GB。我不需要所有的值。例如,我只需要 A 和 B。如果我使用
fit<-tvp(...)
A<-fit$A
B<-fit$B
它需要 3 或 4 GB 的容量。另外,如果我使用
A<-tvp(...)$A
B<-tvp(...)$B
没有容量问题,但是由于tvp函数的两次调用,运行时间很长。我正在寻找一个简单的命令,它可以帮助我只运行一次函数并且不保存所有值,它给了我所需的值。
有人有想法吗?我可以准备一个使用该函数并返回值的新函数,但我想知道有没有更好的解决方案?
【问题讨论】:
-
听起来问题出在
tvp函数上,而不是如何检索输出。如果您编写了函数,请考虑添加一个参数来控制输出中包含哪些数据。如果没有,您可能会被困在向上游作者请求它或在本地重写该函数(以添加该功能......然后作为 PR 提交给作者)。无论哪种方式,调用环境并不总是能够控制被调用函数的存储需求。 -
可以通过对一些调用进行矢量化来优化函数以更快地运行它。如果没有任何帮助,您可以查看
Rcpp包并重写您的函数。 -
这不是我自己的功能。它是 R 包中的一个函数。由于这个原因,我可以使用一个函数,但我想找到一个新的解决方案。
-
mystuff <- tvp(...)[c("A", "B")]呢? -
@Frank 有效。非常感谢。