2013-06-17 3 views
1

잦은 검색과 많은 포럼 읽기 후에이 답변을 찾거나 이해해야 했는데도 여전히 혼란 스럽습니다. 나는 두 개의 중첩 된 for 루프를 변수에 저장할 필요가 있지만 정확하게 할당 할 위치와 위치를 알지 못합니다. 코드가 원하는대로 기능합니다. 한 가지 형태로 출력을 얻는 방법을 찾지 못하는 것입니다. 루프로의 입력은 부분 행렬 목록입니다. 출력은 동일한 형식 일 수 있지만 루프에서 발생한 변경 사항을 포함하거나 더 이상적인 형식은 하나의 행렬에있는 모든 행과 열을 포함합니다. 나는 cbind를 수행하고 나중에 모든 것을 저장하는 루프 외부의 변수를 만들려고 시도했다. (아마도 내 주석 처리 된 시도를 알 수있을 것이다.) 그러나 내가 말한 것처럼, 나는 아직도 약간 혼란 스럽다. 어떤 도움이라도 대단히 감사하겠습니다!중첩 된 루프의 출력을 r에 저장

loop.List <- list() 
#results.frame <- data.matrix() 

ctr <- 0 # creating a counter and zeroing it 


for (i in 1:length(subM.List)) { #Looping through each submatrix in the list 
    loop.List[[i]] <- list() 
    for (j in 2:nrow(subM.List[[i]])){ #Loop through each row of each submatrix in the list 
    if ((subM.List[[i]][j, "LAT"] == -180) & #Imputation 1, imputing data points with 0 activity intensity 
    (subM.List[[i]][j, "ACTIVITYIN"] == 0) & 
    !((subM.List[[i]][j-1, "ACTIVITYIN"] > 0))[1]) { #stop imputing at the first occurrence of a value > 0 in activity intensity 
     imputeLat <- replace(subM.List[[i]][ ,"LAT"], subM.List[[i]][j,"LAT"], subM.List[[i]][j-1,"LAT"]) 
     imputeLon <- replace(subM.List[[i]][ ,"LON"], subM.List[[i]][j,"LON"], subM.List[[i]][j-1,"LON"]) 
     replace.col <- replace(subM.List[[i]][ ,"Impute"], subM.List[[i]][j,"Impute"], 1) #populated impute column. If point is imputed will have a 1 
     allComb <- cbind(imputeLat, imputeLon, replace.col) 
     ctr <- (ctr + 1) 
    } 
    } 
    #result[[i]] <- allComb 
#write.table(results.frame, "C:\\RWorkspace\\newMatrix.txt") 
    #return(results.frame) 
} 

편집 : 서브 매트릭스 목록 중 하나의 데이터 샘플은 행하게 다른 번호가 여러 서브 매트릭스가 포함되어 있습니다. 당신은 당신이 이러한 루프의 결과를 유지하려면 루프, 당신은 당신이 캡처하려는 출력 저장 변수의 일종을 작성해야합니다 당신의 범위를 외부 ctr 변수를 생성하는 방법을

FixTYPE   ActivityIn LAT  LON  Impute 
8      0 32.81320 -117.2300 
8      0 32.81324 -117.2301 
8      1 32.81327 -117.2302 
8      1 32.81326 -117.2301 
6      0 32.81324 -117.2300 
6      0 32.81338 -117.2302 
6      0 32.81353 -117.2299 
7      0 -180.000 -180.000 
7      0 -180.000 -180.000 
7      0 -180.000 -180.000 
7      0 -180.000 -180.000 
7      1 -180.000 -180.000 
7      2 -180.000 -180.000 
7      1 -180.000 -180.000 
1      0 32.81315 -117.2300 
8      0 32.81318 -117.2300 
+1

아마도 이것은 모두'lapply'와'apply'로 할 수 있지만 데이터 (또는 최소한의 예)에 대한 접근이 없으면 특별히 도움이 되기는 어렵습니다. – alexwhan

+0

하나를 취하는'foo' 함수를 작성하는 것이 좋습니다. 서브 매트릭스를 입력으로하여'allComb'을 출력합니다. 그런 다음'lapply (subM.List, foo)'또는'do.call (rbind, lapply (subM.List, foo))'를 실행하십시오. – flodel

답변

3

유사 . 재현 할 수있는 예제를 제공 할 수 있다면 더 많은 것을 도울 수 있습니다.

다음은 간단한 예제 :

p=10 
q=20 
M=matrix(seq(1,p*q), p, q) 

output=matrix(NA, p,q) # storage matrix 
for(i in 1:p){ 
    for(j in 1:q){ 
    # do something 
    output[i,j] = 2*i + j^2 
    } 
} 

다른 사람이 언급했듯이, 그것은 당신이 apply 기능을 사용하여 간단하게 할 것이다 달성 하려는지 가능성이 높습니다.

+0

좋아, 다비드 마르크스, 나는 마침내 그것을 얻은 것 같아. 그리고 네, 적용 기능에 익숙해 져야하고 루프를 많이 사용하지 않아야합니다. – Misc

+0

@David Marx, 데이터 프레임을 입력하고 출력을 i와 j가 모두 열인 데이터 프레임으로 만들려면 어떻게해야합니까? –

+0

@PolarBear이 질문은 다른 질문처럼 들립니다. 이 질문에 새로운 주제를 게시하고 데모 입력을 제공하고 출력이 어떻게 생겼는지 예상 할 수 있습니까? 여기에 링크하면이 토론을 이동할 수 있습니다. –