2012-10-02 4 views
-2

루프에 문제가 있습니다. ... 같은 것을 열 조건이있는 행을 삭제하기위한 루프

for (i in 1:105) { 
    for (j in 1:l[i+1]){ 
    if(m[[i]][j,12]==0 | is.na(m[[i]][j,12])) { 
     m[[i]]=m[[i]][-j,] 
    } 
    } 
} 

어쩌면 내가 기능을 적용 사용할 수 나는 것을보고 웹에서 검색 : 그것은 단지 내 욕망 열에서 0 또는 NA 값이 일부 행을 삭제 한 이유를 모르겠어요 :

for(i in 1:105){m[[i]]<-m[[i]][!apply(is.na(m[[i]]), 1, any),]} 

for(i in 1:105){ 
    as.null(0) 
    m[[i]]<-m[[i]][!apply(is.null(m[[i]]), 1, any),] 
} 

이 ... 오류 ... 내가

다음하지만 명확하게 좋지 않다 나는 뭔가를 생각하고 있었다 NULL

으로 제로 수를 설정하려는 나에게 희미한 (X)를 던졌습니다 그것은 단지 아이디어 .... 정말 잘 적용 기능을 사용하는 방법을 모르겠어요

for(i in 1:105){as.null(0) m[[i]]<-!apply(m[[i]],1,is.null(m[[i]])) } 

유용한 도움을 주셔서 감사합니다.

+1

루핑이 필요하지 않다고 생각합니다. 유지하고 싶은 항목을 식별하고 하위 집합 만 지정하면됩니다. 그러나 당신이 작업하고있는 데이터 구조에 관해서는 혼란 스럽습니다. 'data.frames'의'list'입니까? – James

+0

@ 토마스, 당신은 편집해야하고 더 자세히 질문, 나는 당신의 마지막 질문을 읽기 때문에 따라야하지만 모든 질문은 독립적이어야하며 재현 가능해야합니다. –

답변

1

배열의 여백에 함수를 적용하려면 apply을 사용합니다. 그러나 매트릭스를 올바르게 부분 집합 만해야하기 때문에 여기서는 최선의 방법이 아닌 것 같습니다. 하나의 매트릭스 m에 초점을 맞추자.

ind = m[,12] == 0 | is.na(m[,12]) 

ind

TRUE 곳 appropiate이되고 당신은

m = m[!ind, ] # m is a matrix, not the list 

이 행을 제거 할 수 있습니다. 당신은 루프 내에서이를 넣어, 또는 (목록을 통해 기능을 적용) lapply를 사용하지만, 먼저는

removeRows = function(m) { 
ind = m[,12] == 0 | is.na(m[,12]) 
m = m[!ind, ] 
return(m) 
} 

m = lapply(m, FUN=removeRows) 
때문에, 목록 (모든 105 매트릭스)의 모든 요소에 적용 할 수있는 기능을 필요로 할 수 있습니다

그게 효과가있다.

관련 문제