与R固有的矢量化性质有关的一个很好的特征是第2.2节An Introduction to R中描述的循环规则.
发生在同一表达式中的向量不一定都具有相同的长度.如果不是,则表达式的值是一个向量,其长度与表达式中出现的最长向量相同.表达式中较短的向量的频率为recycled,直到它们与最长向量的长度匹配为止.特别是一个常数只是简单地重复.
大多数标准函数都使用它,但这样做的代码隐藏在底层C代码中.
有没有一种规范的方法可以完全在R代码中实现函数的标准回收规则?也就是说,给定一个函数
mock <- function(a, b, c) {
# turn a, b, and c into appropriate recycled versions
# do something with recycled a, b, and c in some appropriately vectorized way
}
如果a
、b
和c
是向量,可能具有不同的长度和未知的类型/类别,那么有没有一种规范的方法来获得根据标准回收规则回收的一组新向量?特别是,我不能假设"做点什么"这一步本身就能实现正确的回收,所以我需要事先自己做.