2013-04-25 5 views
4

루프에서 테스트를 기반으로 행을 식별합니다. I 반복적 그들의 인덱스 (IDX)를 사용하여 원래의 행렬 (INM)로부터 그 행을 제거 :인덱스를 기반으로 루프에서 행렬 제거

inM <- inM[-idx,] 

때로는 IDX 즉 어떤 행이 검사를 만족하지 비어 따라서, IDX는 정수형 (0). inM에서 idx를 제거하면 같은 행렬이 아닌 빈 행렬이됩니다. 결과적으로 다음 반복을 위해 빈 행렬을 얻었습니다 ...

이를 피하려면 한 줄짜리 해결책이 있습니까?

+0

네, IDX이 비어 있거나 여부를 확인하는 조건을 추가 할 수 있습니다. –

답변

4

당신은 ?setdiff 기능을 사용하여 if을 방지 할 수 있습니다

inM <- inM[setdiff(1:nrow(inM), idx), ] 
+0

감사합니다. 그것은 이상하게 작동합니다! – WAF

+0

'(길이 (idx)) inM <- inM [-idx,]'는 특히 매트릭스가 크고'idx'가 비어있는 경우가 더 효율적입니다. "inM' 모든 요소를 ​​다시 할당하십시오"라고 대답하는 것보다 "do nothing"이라고 말하는 것이 더 낫습니다. – sieste

+0

@sieste이 해결책이 setdiff보다 훨씬 더 효율적이라면 그것을 기반으로 한 해결책입니다. 똑똑한 – droopy

0

당신은 예를 들어 루프에 조건을 추가 할 수 있습니다 같은

if (length(idx)==0) 
    next 

당신이 다음 반복에 전달할 삭제하는 행이없는 경우.

+0

감사합니다. 'if'를 피할 수있는 방법이 있을까요? – WAF

관련 문제