2012-06-17 2 views
1

저는 R에 익숙하며 코드 작성을 원하는 루프의 테스트에 문제가 있습니다. 여기에 같은 데이터 프레임 (tabetest)로 후 :누락 된 값 참/거짓 : 루프가 일회성이 아닙니다.

Date 25179M103 
1 14977 77.7309 
2 14978 77.2567 
3 14979 77.7507 

내가 가진 :

> if (tabetest[3,"Date"] - tabetest[1,"Date"] > 1){ print("ok") } 

[1] "ok" 

그러나 :

j = 1 
position = 1 
price = tabetest 

for (i in 1:nrow(tabetest) - position){ 
    if (tabetest[i + position,"Date"] - tabetest[position,"Date"] > 20{ 
     price[i + position,j] = price[i + position,j]/price[position,j] - 1} 
     position = position + 1 
    } 

가 오류를 반환합니다. 나는 그것이 어디에서 오는지 이해하지 못하고 여전히 오류에 꽤 많은 시간을 할애하지만, 한

if (tabetest[i + position, "Date"] - tabetest[position, "Date"] > 

: R은 참/거짓이 필요합니다 누락 된 값이 있음을 말한다.

답변

4

먼저 운영 명령에 문제가 있습니다. 당신이 수정 한 후에는 다음 c(1, 2, 3) - 1

> 1:3-1 
[1] 0 1 2 

그러나 동일하다 nrow(tabetest)-position

괄호를 넣어 필요, 그러나 이것은 c(1, 2)

> 1:(3-1) 
[1] 1 2 

과 동일 여전히거야 그 문제가있다. 루프를 통해 두 번째로 i은 2이고 position은 2입니다. 즉, 은 입니다. 왜냐하면 position + i == 4이기 때문에 data.frame이 3 개 밖에 없기 때문입니다.

이 대부분 추측이지만, 어쩌면 당신은 if 문에서 조건이 같은 TRUE 경우에만 position을 증가 할 :

for (i in 1:(nrow(tabetest)-position)){ 
    if(tabetest[i+position,"Date"]-tabetest[position,"Date"]>20){ 
     price[i+position,j]=price[i+position,j]/price[position,j]-1 
     position=position+1 
    } 
} 
+0

감사가 많은 도움이되었습니다. – VincentH

+0

문제는 해결 되었습니까? 그렇다면 대답 옆의 체크 표시를 선택하여 "동의"하십시오. 감사. – GSee

관련 문제