以下是print.nc(p8m.tmax)的一些输出,以便更加清晰。其他数据集除了特定的气候变量外,完全相同。
dimensions:
month = UNLIMITED ; // (1368 currently)
lat = 3105 ;
lon = 7025 ;
variables:
float lat(lat) ;
lat:long_name = "latitude" ;
lat:standard_name = "latitude" ;
lat:units = "degrees_north" ;
float lon(lon) ;
lon:long_name = "longitude" ;
lon:standard_name = "longitude" ;
lon:units = "degrees_east" ;
short tmax(lon, lat, month) ;
tmax:missing_value = -9999 ;
tmax:_FillValue = -9999 ;
tmax:units = "degree_celsius" ;
tmax:scale_factor = 0.01 ;
tmax:valid_min = -5000 ;
tmax:valid_max = 6000 ;
当我使用RNetCDF包中的var.get.nc函数时,我遇到了一些不理解的行为。
例如,当我尝试从最高温度数据(p8m.tmax <- open.nc(tmaxdataset.nc))中提取从stval开始的82个值时,出现了问题。
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,82))
(其中lon_val和lat_val指定了我感兴趣的坐标在数据集中的位置,stval设置为which(time_vec==200201),在这种情况下等于1285。) 我收到了错误信息:无效参数
但成功提取了80和81个值后
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,80))
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,81))
命令82有效:
> var.get.nc(p8m.tmax,'tmax', start=c(lon_val, lat_val, stval),count=c(1,1,82))
[1] 444 866 1063 ... [output snipped]
同样的问题也出现在结构相同的tmin文件中,但是发生在36而不是82:
> var.get.nc(p8m.tmin,'tmin', start=c(lon_val, lat_val, stval),count=c(1,1,36))
产生错误:参数无效
但是在重复使用30、31等计数后
> var.get.nc(p8m.tmin,'tmin', start=c(lon_val, lat_val, stval), count=c(1,1,36))
工作正常。
这些示例似乎表明函数在最后一个计数时失败了,但实际上并非如此。在第一个示例中,当我请求84个值时,var.get.nc会给出错误:无效参数。然后,我通过在数据集中变化起点并一次只请求1个值来缩小故障范围,将故障缩小到第82个计数。问题发生的特定数字也会有所变化。我可以关闭并重新打开数据集,并在不同位置遇到问题。
在上述特定示例中,lon_val和lat_val分别为1595和1751,它们确定了我感兴趣的纬度和经度沿着数据集的位置。然而,第1595个纬度和第1751个经度并不是问题所在。然而,我尝试的所有其他纬度和经度都存在问题。
在气候变量维度(stval)中对数据集的起始位置进行变化和/或将其指定为命令中的数字(而不是对象stval)也无法解决该问题。
这个问题并不总是发生。我可以连续三次运行相同的代码(在运行之间清除所有对象),每次都得到不同的结果。第一次运行可能会卡在我尝试获取的第7个条目上,第二次可能会正常工作,第三次运行可能会在第83个条目上卡住。这种不一致的行为让我感到困惑。
open.nc函数也开始出现了相同的错误:无效参数。与var.get.nc问题一样,它也不稳定地出现。
有没有人知道是什么导致了提取变量的初始失败?我该如何防止它发生?可能与数据文件的大小(每个文件约60GB)以及我通过网络驱动器访问它们有关吗?
这也在这里提问过: https://stat.ethz.ch/pipermail/r-help/2011-June/281233.html
> sessionInfo()
R version 2.13.0 (2011-04-13)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] reshape_0.8.4 plyr_1.5.2 RNetCDF_1.5.2-2
loaded via a namespace (and not attached):
[1] tools_2.13.0