[英]Extracting 3D netcdf variable from lists within nested loop in R
假設我有3個不同站點的n個時間步長的10個模型配置,總共生成了30個我要打開和操作的netcdf文件。 我可以打開30個文件,例如
require(ncdf4)
allfiles= list()
nmod=10
nsites=3
for (i in 1:nmod) {
allfiles[[i]] = list(nc_open(paste0('Model',i,'siteA.nc')),
nc_open(paste0('Model',i,'siteB.nc')),
nc_open(paste0('Model',i,'siteC.nc')))
}
當查詢打開什么的類時,我有
類(所有文件)
[1]“清單”
類(所有文件[[1]] [[1]])
[1]“ ncdf4”
如預期的那樣。 現在我要做的是從文件中的變量中提取值,這樣
var=list()
for (i in 1:nmod) {
for (j in 1:nsites) {
var[[i]][[j]] <- ncvar_get(allfiles[[i]][[j]],"var1")
nc_close(allfiles[[i]][[j]])
}}
但我收到此錯誤消息:
`Error in *tmp*[[i]] : subscript out of bounds`
如果我嘗試
var[[i]] <- ncvar_get(allfiles[[i]][[j]],"var1")
它(理解)僅在一個站點上生成10個模型配置的列表,即var[[1]][[1]][1]
在模型配置1,站點A,時間步1處打印出變量的值,但var[[1]][[2]]
不存在。 如何在上面的循環中聲明var
,以便它包含所有模型,所有站點和所有時間步的所有值(例如var[[1]][[2]][1]
存在)?
在發生錯誤的原始版本中,在第一個內部循環中,您嘗試執行以下操作: var[[1]][[1]] <- something
,但是var[[1]]
不存在,並且R
不知道該怎么辦,所以我猜下面的事情應該起作用,您在執行var[[i]][[j]] <- something
之前先設置var[i] <- list()
:
var=list()
for (i in 1:nmod) {
var[i] <- list()
for (j in 1:nsites) {
var[[i]][[j]] <- ncvar_get(allfiles[[i]][[j]],"var1")
nc_close(allfiles[[i]][[j]])
}
}
例如,如果您這樣做:
var <- list()
for (i in 1:10) {
for (j in 1:10) {
var[[i]][[j]] <- 1
}
}
然后發生相同的錯誤。 但是,如果您在執行內部循環之前設置var[[i]] <- list()
,如下所示:
var <- list()
for (i in 1:10) {
var[[i]] <- list()
for (j in 1:10) {
var[[i]][[j]] <- 1
}
}
然后問題就解決了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.