2012-02-26 2 views
3

Я ищу для запуска этого цикла, но для выполнения требуется недопустимо долгое время (~ 20 секунд). х и у являются предопределенными векторы длины 2000000Ускорение цикла for в R

for(i in 1:2000000) 
{ 
    a <- runif(1) 
    b <- runif(1) 
    sqrtf <- sqrt(-log(b,10)) 

    x[i] <- sqrtf*cos(a) 
    y[i] <- sqrtf*cos(b) 
} 

Любые приемы, доступные для ускорения этого немного?

EDIT: исправлена ​​sqrtf

ответ

5
n <- 2e6 
set.seed(101) 
a <- runif(n) 
b <- runif(n) 
sqrtf <- sqrt(-log10(b)) 
x <- sqrtf*cos(a) 
y <- sqrtf*cos(b) 
+0

Почему у вас есть задания на 'x' и' y'? Вы никогда не используете их. –

+0

потому что я спешил. исправлено, спасибо. –

3
# just so you don't have to write 2000000 over and over 
n <- 2e6 
# so the results are replicable 
set.seed(0) 
# the meat and potatoes... this is "vectorized" code that you'll hear lots about 
# as you study R 
a <- runif(n) 
b <- runif(n) 
sqrtf <- sqrt(-log10(b)) 
x <- sqrtf * cos(a) 
y <- sqrtf * cos(b) 
Смежные вопросы