2016-12-23 1 views
0

저는 현재 R 프로그램에서 작업하고 있습니다.이 프로그램의 한 부분은 상호 의존적 인 두 값을 루프에서 계산합니다. 10 만회 반복해야하므로 오랜 시간이 걸립니다.R :이 루프를 어떻게 변경하여 적용 할 수 있습니까?

그래서이 루프를 적용 루프 나 좀 더 효율적인 함수로 대체하고 싶습니다. 그러나 어떻게 해야할지 모르겠습니다. 누군가 나를 도울 수 있습니까?

p <- c() 
for(i in 1:n) { 
    if(i == 1) { 
    x <- b[i] 
    } 
    else { 
    x <- c(x, max(h[i - 1], p[i])) 
    } 
    h <- c(h, x[i] + y[i]) 
} 

대단히 감사합니다!

+2

무엇이 'p'에 값을 할당합니까? 'h '가''p''입니까? –

+2

위의 질문에 x, y, p, b 및 h는 무엇인지 명확하지 않습니다. 한 가지 조언 : x <-c (x, addnewvalue) 표기법을 사용하여 벡터에 계속 추가하는 것은 시간이 많이 걸립니다. x <-vector (n)을 미리 할당하고 x [i]로 값을 할당하십시오. – Dave2e

답변

5

현재 전체 작업 예제를하지 않는 것, 그러나 가장 큰 문제는 c() 기능으로 xh 벡터를 구축하는 것은 매우 느린 것입니다.

x <- numeric(n) # allocate vector of size n 
h <- numeric(n) 

을하고 x[i]h[i]에 할당하여 가서 다음을 기입 : 그것은을 미리 할당하는 것이 좋습니다. 예를 들어, 다음 루프 :

x <- c(); for (i in 1:100000) x <- c(x,1) 

내 노트북에서 실행되도록 10 초 정도 걸리지 만이 버전 : 거의 즉각적으로 실행하는 동안

x <- numeric(100000); for (i in 1:100000) x[i] <- 1 

이 같은 일을한다.

관련 문제