gpt4 book ai didi

r - 在 R 中的另一个函数中定义和调用一个函数有什么好处?

转载 作者:行者123 更新时间:2023-12-04 06:18:03 29 4
gpt4 key购买 nike

方法 1

f1 <- function(x)
{
# Do calculation xyz ....

f2 <- function(y)
{
# Do stuff...
return(some_object)
}

return(f2(x))
}

方法二
f2 <- function(y)
{
# Do stuff...

return(some_object)
}

f3 <- function(x)
{
# Do calculation xyz ....
return(f2(x))
}

假设 f1f3两者都进行相同的计算并给出相同的结果。

使用方法 1 调用 f1() 是否有任何显着优势? , 与方法 2 相比,调用 f3() ?

在以下情况下,某种方法是否更有利:
  • 大量数据正在传入和/或传出f2 ?
  • 速度是个大问题。例如。 f1f3在模拟中被重复调用。

  • (方法 1 似乎在包中很常见,在另一个包中定义)

    使用方法的一个优点 f1f2不会存在于 f1 之外一次 f1已完成调用(并且 f2 仅在 f1f3 中调用)。

    最佳答案

    定义 f2 的好处里面 f1 :

  • f2仅在 f1 内可见, 在 f2 时有用仅适用于 f1 ,尽管在包命名空间中这是有争议的,因为您不会导出 f2如果你在
  • 之外定义它
  • f2可以访问 f1 中的变量,这可以被认为是好事或坏事:
  • 很好,因为你不必通过函数接口(interface)传递变量,你可以使用<<-实现内存等功能。
  • 糟糕,出于同样的原因...

  • 缺点:
  • f2每次调用 f1 时都需要重新定义,这增加了一些开销(不是很多开销,但肯定存在)

  • 数据大小应该无关紧要,因为 R 不会复制数据,除非在任何一种情况下都对其进行修改。如缺点中所述,定义 f2 f1 之外应该快一点,特别是如果您多次重复其他相对较低的开销操作。这是一个例子:
    > fun1 <- function(x) {
    + fun2 <- function(x) x
    + fun2(x)
    + }
    > fun2a <- function(x) x
    > fun3 <- function(x) fun2a(x)
    >
    > library(microbenchmark)
    > microbenchmark(
    + fun1(TRUE), fun3(TRUE)
    + )
    Unit: nanoseconds
    expr min lq median uq max neval
    fun1(TRUE) 656 674.5 728.5 859.5 17394 100
    fun3(TRUE) 406 434.5 480.5 563.5 1855 100

    在这种情况下,我们节省了 250ns(编辑:差异实际上是 200ns;信不信由你, {} 的额外集合 fun1 又花费了 50ns)。不多,但如果内部功能更复杂或您多次重复该功能,则可以加起来。

    关于r - 在 R 中的另一个函数中定义和调用一个函数有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331499/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com