【发布时间】:2012-12-30 17:35:05
【问题描述】:
如果有两个向量,比如说x 和y。
for (i in 1:length(x))
z[i] = max(x[i],y[i])
您能帮我在不使用循环的情况下执行此操作吗?
【问题讨论】:
-
不要忘记考虑在满意地回答您的问题的答案上单击“接受”...
-
这在
?max中有记录。
标签: r vectorization
如果有两个向量,比如说x 和y。
for (i in 1:length(x))
z[i] = max(x[i],y[i])
您能帮我在不使用循环的情况下执行此操作吗?
【问题讨论】:
?max中有记录。
标签: r vectorization
假设向量x 和y 的长度相同,那么pmax 就是你的函数。
z = pmax(x, y)
如果长度不同,pmax 表达式将返回与循环不同的值,因为回收。
【讨论】:
为了完整起见,我提供了一个使用 apply 的解决方案:
Z = cbind(x,y)
apply(Z, 1, max)
我不知道不同解决方案在速度方面的比较,但是,@JevgenijsStrigins,你可以很容易地检查。
【讨论】:
apply,因为它在可以应用的功能方面更加灵活。
library(benchmark); set.seed(101); x <- runif(1000); y <- runif(1000); benchmark(apply(cbind(x,y),1,max),pmax(x,y)) 表明 pmax 快了大约 40 倍(不知道 cbind() 的成本是多少)
cbind 可能会有一些开销,但我无法想象它会导致速度下降 40 倍。