a <- c(1,3,4,5,6,7,3)
b <- c(3,5,1,3,2)
我希望对每个输入的a
应用一些函数FUN
,并针对整个b
进行操作,最有效的方法是什么。
更具体地说,在这种情况下,对于a
中的每个元素,我想知道对于每个'a'值,有多少b
中的元素大于或等于该值。天真的方法是执行以下操作:
sum(a < b)
当然,这样做是行不通的,因为它试图并行迭代每个向量,并给出警告:
顺便说一下,该命令的输出是长对象长度不是短对象长度的倍数
3
。然而,在我的情况下,我想要看到的输出是:
0 2 4 4 5 5 2
当然,我意识到可以使用for循环来实现这个功能:
out <- c()
for (i in a) {
for (i in a) { out[length(out) + 1] = sum(b<i)}
}
同样的,我可以使用
sapply
这样做:sapply(a, function(x)sum(b<x))
然而,我试图成为一名优秀的R程序员并且避免使用for循环,sapply
看起来速度非常慢。是否有其他替代方案?
就我的情况而言,我需要执行几百万次操作,其中b
的长度始终小于a
的长度,而a
的长度范围从1到30不等。
a
和b
是否都会变化,还是其中一个固定不变? - Prasad Chalasani