2013-04-05 3 views
3

의 루프를 수행하십시오. 죄송합니다. 잘못된 위치이거나 잘못되었습니다. 처음 여기에서 묻습니다. 나는 아주 적은 프로그래밍 경험 (대학에서 파스칼 수업을했고, 매크로 미디어 용어에 매우 능숙했다. 그래서 코드를 두려워하지 않았다.)에 익숙하지 않다.내 루프가 끝날 때까지 R

물건을 짧고 간결하게 유지하기 위해, 내가 갖고있는 것을 보여주고, 무엇을하고 싶은지를 보여주는 것이 가장 좋습니다. 시간을 들여 검색하고 해결책을 찾으려고 몇 시간을 보냈습니다.

는 "신호"라는 XTS 객체이며, 여기 왼쪽 일 (색인 내가 (이 예는 예를 들어 단순)로 만들려면 :

open close position 
0  0  0 
1  0  0 
0  0  0 
0  0  0 
0  1  0 
0  0  0 

을 그리고 난 일이 싶은 것이 :. "닫기"를 참이 될 때까지

open close position 
0  0  0 
1  0  1 
0  0  1 
0  0  1 
0  1  1 
0  0  0 

기본적으로, 해당하는 경우 "열기", 내가 생각하기에, 놀라 울 정도로 간단한 "위치"에 1 초를 반복하지만, 어떻게 든 나는 그것이 작동 할 수 없습니다 여기에서 예. 내가 어쩌면 가까이있는 줄 알았지 만 무한 루프에 갇혀있다.

for (i in 1:nrow(signals)) { 
    if (signals[i,"open"]==1) next 
    while (signals[i,"close"] == 0) { 
    signals[i,"position"] <- 1 } 
} 

감사합니다.

EDIT - 중요한 한정어는 사용하지 않았습니다. "close"의 첫 번째 진술이 "open"의 첫 진실 진술보다 먼저 나오는 경우가 있습니다. 그러나 이제는 여기에서 썼다. 가까운 열을 아무 래도 '청소'하는 것이 더 쉽다고 가정하기 때문에 열린 열의 첫 번째 점보다 먼저 1이 없다.

그러나 누군가 다른 사람이 모두 어떻게 할 생각이 있으면 추가 정보를 자유롭게 추가하십시오. 감사!

답변

7

이에 대한 루프를 사용할 필요가 없습니다 :

cumsum(open-c(0,close[-length(close)])) 
[1] 0 1 1 1 1 0 

: 당신은 당신이 가까운 신호 사용을 얻을 후 라인에 원하는 경우

open <- c(0,1,0,0,0,0) 
close <- c(0,0,0,0,1,0) 
position <- cumsum(open-close) 
position 
[1] 0 1 1 1 0 0 

참고이 즉시 종료 while 상태가 끝나지 않는 이유는 테스트중인 내용을 수정할 필요가 없다는 것입니다. 즉, i이 증가하지 않습니다.

+0

와우, 이것은 내가 완전히 다른 방식으로 문제를 보게했다. 그리고 원래의 질문에 답합니다. 놀랍도록 빠른 응답을 주셔서 감사합니다. 나는 매우 안심이된다. –

관련 문제