G'day、私は種存在/不在記録のために、日付が付いた約125,000の緯度/経度の場所で大規模なデータセットを扱っています。それぞれの場所では、日時の前と3m前の間に各地の気象がどのようなものかを考えたいと思います。これを行うために、私は、データが取られた5年間の間、与えられた気象変数(例えば、最高温度)の毎日の気象データをダウンロードした。私は合計で1,826のラスターファイルを持っています。すべて2〜3MBです。Rでたくさんのデータとたくさんのラスタを扱っていますか?
私はすべてのラスターファイルをスタックし、各ポイントごとにすべてのラスター(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)
これまで行ってきた膨大なデータのサイズを思い出すことはできませんが、私は幸運にもトンやラスタを名前付きリストに持ってきました。あなたはおそらくあなたの時間のボトルネックになるだろうと分かっているかもしれないので、できるだけその使用を制限しようとします。私はtapply/by/ddplyファミリーの関数を使って大規模なデータフレームをグループに分割し、適切なファイル(それぞれの場合、日付グループ化のようなもの)の各グループに対して抽出を使用してから、再アセンブリしますしかし、私はこれで大成功を収めていません。 – blindjesse
これらのファイルをff配列に読み込み、それらのファイルからポイントの抽出を設定するだけで十分です。あなたは、作業のために1つまたは2つのファイルへのリンクを提供することができますか、コードで有用なデータを生成できますか?また、ファイルを読み込むためにfile.choose()を使用しますが、書き込みに使用した名前はなぜ使用しませんか? – mdsumner
しかし、どうしてもそれらを一度に読んでみるのはなぜですか?なぜ、一度に1つのラスタファイルを抽出するだけではないのですか?また、最終結果が大きすぎて単一オブジェクトとして事前初期化できない場合は、ファイルに追加するだけです。 – mdsumner