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

FXQuantTrader

方法1

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

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

    return(f2(x))
}

方法2

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

    return(some_object)
}

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

假定f1f3都进行相同的计算并得出相同的结果。

与方法2相比,使用方法1调用明显的优势吗?f1()f3()

在以下情况下某种方法更有利吗?

  • 大数据正在传入和/或传出f2

  • 速度是一个大问题。例如,f1f3在模拟中反复调用。

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

使用此方法的优点之一f1是,一旦调用完成(仅在或中调用f2就不会在外部存在f1f1f2f1f3

布罗迪

定义f2内部的好处f1

  • f2仅在内部可见f1,如果仅在内部使用则很有f2f1,尽管在包命名空间中这是有争议的,因为f2如果在外部将其定义,则不会导出
  • f2可以访问中的变量f1,这可能被视为好事或坏事:
    • 很好,因为您不必通过函数接口传递变量,并且可以<<-用来实现记忆等内容。
    • 坏,出于同样的原因...

缺点:

  • 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)。数量不多,但是如果内部功能更复杂或您重复多次该功能,则可以累加。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我必须从另一个函数中调用一个函数?

来自分类Dev

从具有相同输入和输出数量的另一个函数中调用一个函数

来自分类Dev

AngularJS从同一模块中的另一个函数调用模块中定义的函数

来自分类Dev

在另一个函数中调用JS函数

来自分类Dev

在另一个函数中调用匿名函数

来自分类Dev

在另一个函数中调用被“隐藏”的函数

来自分类Dev

从另一个函数中调用类函数

来自分类Dev

Python从另一个函数调用一个函数中的函数

来自分类Dev

在另一个用户定义函数中调用SQL用户定义函数

来自分类Dev

如何从bash中的另一个用户定义函数调用用户定义函数?

来自分类Dev

如何从 PHP 中的另一个用户定义函数调用用户定义函数

来自分类Dev

是否可以调用JavaScript中另一个函数中本地定义的函数?

来自分类Dev

在PL / PGSQL中的另一个函数中调用一个函数

来自分类Dev

如何在JavaScript中的另一个函数中调用一个函数

来自分类Dev

为什么我不能从 python 中的另一个函数调用一个函数。函数未定义错误

来自分类Dev

在C中另一个函数的输入中定义一个函数

来自分类Dev

在另一个函数中调用时未定义函数(Python)

来自分类Dev

如何在Kotlin中的另一个函数中调用带有参数的函数

来自分类Dev

从另一个活动中调用函数

来自分类Dev

从Go中的另一个包调用函数

来自分类Dev

从BrightScript中的另一个文件调用函数

来自分类Dev

在另一个bash脚本中调用函数

来自分类Dev

从Kivy中的另一个类调用函数

来自分类Dev

从BrightScript中的另一个文件调用函数

来自分类Dev

在另一个Lisp文件中调用函数

来自分类Dev

在Swift中从另一个类调用函数

来自分类Dev

从python中的另一个函数调用变量

来自分类Dev

在另一个函数中调用列表 - Python

来自分类Dev

调用另一个对象中的函数

Related 相关文章

  1. 1

    为什么我必须从另一个函数中调用一个函数?

  2. 2

    从具有相同输入和输出数量的另一个函数中调用一个函数

  3. 3

    AngularJS从同一模块中的另一个函数调用模块中定义的函数

  4. 4

    在另一个函数中调用JS函数

  5. 5

    在另一个函数中调用匿名函数

  6. 6

    在另一个函数中调用被“隐藏”的函数

  7. 7

    从另一个函数中调用类函数

  8. 8

    Python从另一个函数调用一个函数中的函数

  9. 9

    在另一个用户定义函数中调用SQL用户定义函数

  10. 10

    如何从bash中的另一个用户定义函数调用用户定义函数?

  11. 11

    如何从 PHP 中的另一个用户定义函数调用用户定义函数

  12. 12

    是否可以调用JavaScript中另一个函数中本地定义的函数?

  13. 13

    在PL / PGSQL中的另一个函数中调用一个函数

  14. 14

    如何在JavaScript中的另一个函数中调用一个函数

  15. 15

    为什么我不能从 python 中的另一个函数调用一个函数。函数未定义错误

  16. 16

    在C中另一个函数的输入中定义一个函数

  17. 17

    在另一个函数中调用时未定义函数(Python)

  18. 18

    如何在Kotlin中的另一个函数中调用带有参数的函数

  19. 19

    从另一个活动中调用函数

  20. 20

    从Go中的另一个包调用函数

  21. 21

    从BrightScript中的另一个文件调用函数

  22. 22

    在另一个bash脚本中调用函数

  23. 23

    从Kivy中的另一个类调用函数

  24. 24

    从BrightScript中的另一个文件调用函数

  25. 25

    在另一个Lisp文件中调用函数

  26. 26

    在Swift中从另一个类调用函数

  27. 27

    从python中的另一个函数调用变量

  28. 28

    在另一个函数中调用列表 - Python

  29. 29

    调用另一个对象中的函数

热门标签

归档