f <- function(n){
s <- 0
for (i in 1:n){
s <- s + (i/2)
}
print(s)
}
Хитрость, конечно, что s
рекурсивно зависит от предыдущего цикла ..Как бы вы процитировали этот цикл for в R (s + = i/2)?
[EDIT]
Спасибо за ваши ответы. Я просто пытался проверить прирост производительности с помощью векторизации в R по сравнению с циклами.
С п = 1000000000 выше функция принимает 287 секунд, в то время как sum((1:n)/2)
и sum(seq_len(n)/2)
возвращают мне ошибку, что система «не может выделить вектор размером 7,5 Гб»
Для сравнения той же функции (с п = 1000000000) в Julia занимает 38 секунд (0,87, определяя тип s
), в C++ 2.48 секунды/0.87 компиляция с оптимизацией и в Python 98 секунд/0.88 с использованием декораторов numba.
Разве это не '' сумма (1: n)/2'? – Psidom
Почему вы хотите векторизовать цикл? это просто n * (n + 1)/4, может быть вычислено в постоянное время. –
Это также зависит от вашей машины, я выполнил 'sum (seq_len (n)/2)' с 'n = 1000000000', и я получил' 2.5e + 17' как ответ без каких-либо ошибок. Время, затрачиваемое в среднем на 5.5 секунд. – 989