我怎么知道R中的函数或操作是矢量化的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我怎么知道R中的函数或操作是矢量化的?相关的知识,希望对你有一定的参考价值。

我仍在学习R。是否有某种自动的方法来识别R operationfunctionvectorized?要确定R对象是否为vector,我可以使用is.vector(x),如果TRUE是向量,则返回x,否则返回Falsevectorized是否有类似内容?

例如:

x <- c(1,2,3)
y <- c(3,4,5)
x+y
#[1] 4 6 8

由于+被矢量化,它会自动将adds的各个元素与x的各个元素进行y。否则,我将不得不使用for循环来实现类似的输出。

for(i in seq_along(x)){
  cat(sprintf("%i ", x[i]+y[i]))
}
#4 6 8 

到目前为止,我对术语Vectorized的有限理解是需要对元素进行自动操作,否则我将不得不对矢量的各个元素进行逐一操作。

您是否建议使用一种方法来识别operation中的functionRvectorized

谢谢。

答案

R中的向量化基本上意味着将任何循环都转移到更快的编译语言,例如C或FORTRAN。为此,所涉及的向量应该是“原子的”-即它应该是“平坦的”并且是同质的-并且可以使用typeof()进行检查的向量类型应该对操作有意义正在执行。如果它是原子的,则将其向量化。

另一答案

原则上,它应该从帮助页面显而易见,因此help(function)?function应该给出答案。

另一答案

我想您想找到一种优雅的方式来预先识别矢量化函数(我不确定是否存在)。已经提到的一个简单的选择是检查给定功能的文档。但是,在某些情况下,文档中未明确说明它,因此在这种情况下,您可以很容易地看到在实际使用某个函数时未对它进行向量化。

以上是关于我怎么知道R中的函数或操作是矢量化的?的主要内容,如果未能解决你的问题,请参考以下文章

R - 向量化哪个操作

R中的高效批量处理函数(lapply sapply apply tapply mapply)(转)

R中的高效批量处理函数(lapply sapply apply tapply mapply)(转)

r data.table中的向量化表操作

从片段创建子意图

在tapply或R中使用近似函数