我需要将.nc文件(大小为35 GB)转换为.csv。它显示了一个错误:不能分配大小为70.7GB的向量
如何解决此错误?
我已经成功地将.nc文件(大小为4kb)转换为.csv文件,使用的代码与我用来转换较大文件的代码相同。
我试图在nc.df之前使用gc()命令清除内存.命令。此外,我试图提高内存限制如下。
> memory.limit()
[1] 16306
> memory.limit(size = 120000)
[1] 120000守则如下:
> rm(list = ls())
> library(raster)
> nc.brick <- brick(file.choose())
> nc.df <- as.data.frame(nc.brick, xy=T)
> write.csv(nc.df, file.choose())预期的结果是使用上面的代码获得一个.csv文件。但是,目前,在第二个最后命令(即nc.df <- as.data.frame(nc.brick,xy=T) )之后,它给出了该错误--即错误:无法分配大小为70.7GB的向量。
> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
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] raster_2.5-8 sp_1.2-4 RevoUtilsMath_10.0.0
loaded via a namespace (and not attached):
[1] compiler_3.4.0 RevoUtils_10.0.4 rgdal_1.2-7 tools_3.4.0 Rcpp_0.12.10 ncdf4_1.16
[7] grid_3.4.0 lattice_0.20-35我尝试过库ff,但是它再次给出了同样的错误。
> rm(list = ls())
> library(ff)
> nc.brick <- brick(file.choose())
> nc.df <- as.data.frame(nc.brick, xy=T) 发布于 2019-10-21 10:12:37
看看?raster::as.data.frame:
如果内存不足,无法加载所有值,则可以使用getValues或getValuesBlock读取文件块。您还可以首先使用sampleRegular
您可以在循环中使用getValues或getValuesBlock按块处理文件(在write.csv中使用append = TRUE )。
你也可以降低你的光栅与sampleRegular,以使你的光栅更小。只有你才能决定下采样在你的情况下是否合适。
https://stackoverflow.com/questions/58482965
复制相似问题