我怎么知道R中的函数或操作是矢量化的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我怎么知道R中的函数或操作是矢量化的?相关的知识,希望对你有一定的参考价值。
我仍在学习R
。是否有某种自动的方法来识别R
operation
或function
是vectorized
?要确定R
对象是否为vector
,我可以使用is.vector(x)
,如果TRUE
是向量,则返回x
,否则返回False
。 vectorized
是否有类似内容?
例如:
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
中的function
或R
是vectorized
?
谢谢。
R中的向量化基本上意味着将任何循环都转移到更快的编译语言,例如C或FORTRAN。为此,所涉及的向量应该是“原子的”-即它应该是“平坦的”并且是同质的-并且可以使用typeof()
进行检查的向量类型应该对操作有意义正在执行。如果它是原子的,则将其向量化。
原则上,它应该从帮助页面显而易见,因此help(function)
或?function
应该给出答案。
我想您想找到一种优雅的方式来预先识别矢量化函数(我不确定是否存在)。已经提到的一个简单的选择是检查给定功能的文档。但是,在某些情况下,文档中未明确说明它,因此在这种情况下,您可以很容易地看到在实际使用某个函数时未对它进行向量化。
以上是关于我怎么知道R中的函数或操作是矢量化的?的主要内容,如果未能解决你的问题,请参考以下文章
R中的高效批量处理函数(lapply sapply apply tapply mapply)(转)