2014-12-23 44 views
1

我有几个netcdf文件,我想提取到文本文件,但我发现A,B,C在输出文件es55.txt的第一个值(从第一个文件)重复整个文本文件,所以循环不采取值其他文件 代码:为什么在R中循环时重复第一个值?

library("ncdf") 
a<-list.files("C:\\Users\\CLdata", "*.nc", full.names = TRUE) 
dt <- as.POSIXct(strptime(basename(a), "data_%Y%m%dT%H%M%S_%Y%m%dT%H%M%S", tz = "GMT")) 
for(i in 1:length(a)){ 
    f <- open.ncdf(a[i]) 
    A = get.var.ncdf(nc=f,varid="Sgf",verbose=TRUE) 
    B <- get.var.ncdf(nc=f,varid="gh") 
    C <- get.var.ncdf(nc=f,varid="jk") 
    df=data.frame(date = dt, A, B ,C) } 
    write.table(df,file="es55.txt") 

例如:

"date" "A" "B" "C" 
    "1" 2010-09-29 23:59:59 0.0191961424604022 216 216 
    "2" 2010-09-29 23:59:59 0.0191961424604022 216 216 
    "3" 2010-09-29 23:59:59 0.0191961424604022 216 216 
    "4" 2010-09-29 23:59:59 0.0191961424604022 216 216 
    "5" 2010-09-29 23:59:59 0.0191961424604022 216 216 
+1

我想你需要一个'库'电话在那里。 'get.var.ncdf'从哪里来? –

+0

你确定'es55.txt'包含来自* first *文件的数据吗?在你的循环中,你每次都覆盖'df',只用'df'的最后内容写入文件。所以我宁愿期待将* last *文件的内容('a [length(a)]')写入'es55.txt'。 – Stibu

回答

2

这可能是你的循环之外写入文件的事实。尝试添加到该文件的循环内,如下所示:

library("ncdf") 
a <-list.files("D:\\Cloud\\Dropbox\\Documents\\Shared\\", "*", full.names = TRUE) 

dt <- as.POSIXct(strptime(basename(a), "data_%Y%m%dT%H%M%S_%Y%m%dT%H%M%S", tz = "GMT")) 
for(i in 1:length(a)){ 
    f <- open.ncdf(a[i]) 
    A = get.var.ncdf(nc=f,varid="Sgf",verbose=TRUE) 
    B <- get.var.ncdf(nc=f,varid="gh") 
    C <- get.var.ncdf(nc=f,varid="jk") 
    df <- data.frame(date = dt, A, B ,C) 
    print(df) # For debugging purposes 
    if (i==1) { 
    write.table(df,file="es55.txt") 
    } 
    else { 
    write.table(df,file="es55.txt", append = TRUE)   
} 

否则,什么是在每个循环运行的打印(DF)语句的输出?

相关问题