gpt4 book ai didi

r - 如何在 R 中定义矢量化函数

转载 作者:行者123 更新时间:2023-12-02 11:00:49 26 4
gpt4 key购买 nike

作为标题,我想知道如何在 R 中定义矢量化函数。

  • 只是通过在函数中使用循环吗?
  • 这种方法有效吗?
  • 最佳做法是什么?
  • 最佳答案

    R 级别的循环未矢量化。 R 循环将为向量的每个元素调用相同的 R 代码,这将是低效的。向量化函数通常是指采用向量并以有效方式对整个向量进行运算的函数。最终,这将涉及一些 for of 循环,但由于该循环是在 C 等低级语言中执行的,因此它可以非常高效并针对特定任务量身定制。

    考虑这个愚蠢的函数来成对添加两个向量的元素

    sillyplus <- function(x, y) {
    out <- numeric(length = length(x))
    for(i in seq_along(x)) {
    out[i] <- x[i] + y[i]
    }
    out
    }

    它给出了正确的结果
    R> sillyplus(1:10, 1:10)
    [1] 2 4 6 8 10 12 14 16 18 20

    并且是向量化的,因为它可以一次对整个向量进行运算,但它不是我上面描述的向量化,因为它非常低效。 +在 R 中的 C 级向量化,所以我们真的只需要 1:10 + 1:10 , 不是 R 中的显式循环。

    编写矢量化函数的常用方法是使用已经矢量化的现有 R 函数。如果你想从头开始并且你想用函数做的事情在 R 中不存在作为向量化函数(奇怪,但可能)那么你需要弄脏你的手并将函数的内脏写在C 并在 R 中准备一个小包装器来调用您使用您希望它处理的数据向量编写的 C 函数。有像 Vectorize() 这样的函数的方法为未矢量化的 R 函数伪造矢量化。

    C 不是这里唯一的选择,FORTRAN 和 C++ 一样是可能的,而且,感谢 Dirk Eddelbuettel 和 Romain Francois,后者现在使用 更容易实现。 rcpp 包裹。

    关于r - 如何在 R 中定义矢量化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11965515/

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