今日は、種の存在/不在記録のために、日付付きの 125,000 の経度/緯度の場所を持つ大規模なデータセットを使用しています。各場所について、日付と日付の 3 か月前の各場所の天気を調べたいと思います。これを行うために、データが取得された 5 年間の特定の気象変数 (最高気温など) の毎日の気象データをダウンロードしました。合計 1,826 個のラスター ファイルがあり、すべて 2 ~ 3 MB です。
すべてのラスター ファイルをスタックし、各ポイントのすべてのラスター (1,826) から値を抽出することを計画していました。これにより、必要な日付を検索するために使用できる巨大なファイルが生成されます。ただし、それほど多くのラスターをスタックできないため、これは不可能です。ラスターを 500 のスタックに分割しようとしましたが、これは機能しますが、生成されるファイルは約 1Gb で、非常に低速です (行数 125,000、列数 500)。また、これらのファイルをすべて R に取り込んで大きなデータ フレームを作成しようとすると、うまくいきません。
R でこの量のデータを処理する方法があるかどうか、または支援に使用できるパッケージがあるかどうかを知りたいです。ff のようなパッケージを使用できますか? 私がやりたいことを行うための電力集約型の少ない方法について誰か提案がありますか? ラップリー関数のようなものを考えたことがありますが、これまで使用したことがなく、どこから始めればよいかわかりません。
お時間をいただきありがとうございます。私が現在成功せずに使用しているコードは以下のとおりです。
敬具、アダム
library(raster)
library(rgdal)
library (maptools)
library(shapefiles)
# To create weather data files, first set the working directory to the appropriate location (i.e., maxt)
# list of raster weather files
files<- list.files(getwd(), pattern='asc')
length(files)
memory.size(4000)
memory.limit(4000)
# read in lon/lat data
X<-read.table(file.choose(), header=TRUE, sep=',')
SP<- SpatialPoints(cbind(X$lon, X$lat))
#separate stacks into mannageable sizes
s1<- stack(files[1:500])
i1 <- extract( s1,SP, cellnumbers = True, layer = 1, nl = 500)
write.table(i1, file="maxt_vals_all_points_all_dates_1.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s1,i1)
s2<- stack(files[501:1000])
i2 <- extract( s2,SP, cellnumbers = True, layer = 1, nl = 500)
write.table(i2, file="maxt_vals_all_points_all_dates_2.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s2,i2)
s3<- stack(files[1001:1500])
i3 <- extract( s3,SP, cellnumbers = True, layer = 1, nl = 500)
write.table(i3, file="maxt_vals_all_points_all_dates_3.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s3,i3)
s4<- stack(files[1501:1826])
i4 <- extract( s4,SP, cellnumbers = True, layer = 1, nl =325)
write.table(i4, file="maxt_vals_all_points_all_dates_4.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s4,i4)
# read files back in to bind into final file !!! NOT WORKING FILES ARE TOO BIG!!
i1<-read.table(file.choose(),header=TRUE,sep=',')
i2<-read.table(file.choose(),header=TRUE,sep=',')
i3<-read.table(file.choose(),header=TRUE,sep=',')
i4<-read.table(file.choose(),header=TRUE,sep=',')
vals<-data.frame(X, i1, i2, i3 ,i4)
write.table(vals, file="maxt_master_lookup.csv", sep=",", row.names= FALSE, col.names= TRUE)