的许多值I具有类似于R中的以下的情况:矢量化头(其(T> X)中,n = 1)对于x
t <- (1:100) * 15
x <- c(134, 552, 864, 5000)
我想找到x中的每个值t> x的第一个指数是什么。
y <- numeric(length(x))
for (i in 1:length(x))
y[i] <- which(t > x[i])[1]
# y
# [1] 9 37 58 NA
我被教导R中环是“坏的慢”,虽然这需要为一个相当大的X上运行的时间是不是一个致命弱点,我想:使用循环以下工作想知道是否有更好的方法?
R上的循环不是“不好和慢”。由于您预先分配了循环所填充的对象,因此循环非常好。 – Roland 2013-03-25 15:36:46
因此,循环中的主要开销是重新分配更改大小的对象,而不是处理循环(边界检查等)中固有的东西? – kai 2013-03-30 00:40:47
是的。 'for'循环本身实际上非常高效。初学者经常在循环内部使用非常低效的代码(如增长一个对象),并让人误解循环很慢。当然,真正的矢量化函数(不包括'* apply'函数)总是比循环更快。 – Roland 2013-03-30 12:40:06