2016-06-09 2 views
0

그래서 30 개의 netcdf 파일이 포함 된 폴더를 반복하려고합니다. 여러 개의 레이어에서 변수를 가져 와서 처리하고이 반복의 각 반복을 객체에 바인딩합니다. 일일 데이터로 작업하고 있으며 각 열이 상기 변수의 1 일을 나타 내기를 원합니다. 나는 꽤 가까이에있는 것처럼 보인다. 그러나 위선적 인 말투는 끝내기 위해 그것을 아주 얻는다. 여기 내 루프 :netcdf 파일을 반복하고 각 반복을 객체에 바인딩

files <- list.files(path="../07 epic month 1", pattern="*.nc", full.names=T, recursive=FALSE) 
mydata <- data.frame() 
# Loop over files 
for(i in seq_along(files)) { 
nc = open.ncdf(files[i]) 

i = get.var.ncdf(nc,'NO3') 
i <- i[ , ,c(9:16, 31:36) ] 
    i <- as.vector(i) 
    i = data.frame(i) 
     i[is.na(i)] <- "0" 
     i[ , ] <- sapply(i[ , ], as.numeric) 
      i <- as.matrix(i) 
      i <- split(i ,1:137241) 
       i <- data.frame(i) 
       i <- as.matrix(i) 
        i <- t(i) 
        i <- rowSums(i) 
         i <- data.frame(i) 
         mydata[[i]] 
} 

하지만 루프를 실행할 때이 오류가 얻을 :

Error in .subset2(x, i, exact = exact) : invalid subscript type 'list' 
+0

코드 'browser()'를 코드 어딘가에 넣고 코드 실행 중에 변수 상태를 검사하십시오. –

답변

0

난 당신이 각 파일에서 추출 무엇에 완전히 명확하지 오전하지만 lapply을 사용할 수 있습니다 루프에서 파일을 읽는다. 나에게 제공되는 샘플 데이터와 예상 출력이 없기 때문에이 솔루션을 테스트 할 수 없었습니다. 그러나 나는 이것이 당신이 더 일하기 시작할 것이라고 확신합니다.

mydata_files <- lapply(list.files(), FUN = function(x) { 
     nc <- open.ncdf(files(x)) 
     i <- get.var.ncdf(nc,'NO3') 
     data <- i[ , ,c(9:16, 31:36) ] 
     result <- rowSums(data) 
     return(result) 
}) 
result <- do.call("cbind", mydata_files) 
0

그래, 알아 냈어. 달리기 위해서는 약간의 tweek가 필요했습니다.

files <- list.files(path="../07 epic month 1", pattern="*.nc", full.names=T, recursive=FALSE) 
mydata <- 1:137241 
mydata = data.frame(mydata) 
# Loop over files 
for(i in seq_along(files)) { 
nc = open.ncdf(files[i]) 

# Read the whole nc file and read the length of the varying dimension (here, the 3rd dimension, specifically time) 
out = get.var.ncdf(nc,'NO3') 
    out <- out[ , ,c(9:16, 31:36) ] 
    out <- as.vector(out) 
    out = data.frame(out) 
     out[is.na(out)] <- "0" 
     out[ , ] <- sapply(out[ , ], as.numeric) 
      out <- as.matrix(out) 
      out <- split(out ,1:137241) 
       out <- data.frame(out) 
       out <- as.matrix(out) 
        out <- t(out) 
        out <- rowSums(out) 
         mydata <- cbind(mydata, out) 

} 
관련 문제