【问题标题】:taking multiple returns in a function in R in only one command仅在一个命令中在 R 中的函数中获取多个返回
【发布时间】: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 &lt;- tvp(...)[c("A", "B")] 呢?
  • @Frank 有效。非常感谢。

标签: r list function


【解决方案1】:

我根据@Frank 的评论回答我的问题。如果我们使用像mystuff &lt;- tvp(...)[c("A", "B")] 这样的命令,它会返回一个列表mystuff,其中包含所需的值。

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2018-02-09
    • 2022-01-16
    相关资源
    最近更新 更多