2016-12-17 8 views
-1

私は、地理的領域の緯度と経度の四角形メッシュを持っています。しかし、私はこのメッシュの4隅の緯度と経度の値しか知っていません。これらを使って、すべての十字線でlat-long値を計算する必要があります。そこで、緯度と経度のネストされたループプログラムをRに追加しました。目的の結果をエクスポートできませんR

tllong<-67.481961 

    sink("output_long.txt") 
    for (i in c(1:11447)) { 
    for (j in c(1:10335)) { 
     tllong<- 67.481961 + (j-1)*0.0030769 
     print(tllong) 
    } 

    } 
    sink() 

上記のプログラムは経度を計算するためのものです。 tllongは、メッシュの左上隅の経度の値です。 11447は緯度の数で、10335は経度の数です。

同様に、私は緯度を計算するためのプログラムを作成しました。 tllat

tllat<-36.348639 

    sink("output_lat_again.txt") 
    for (i in c(1:11447)) { 
     for (j in c(1:10335)) { 
     print(tllat) 
     } 
     tllat<- tllat - (i-1)*0.002508 
    } 
    sink() 

左上メッシュ正方形の緯度の値です。

ループが最初にすべての緯度、長い値を計算することがわかります。次に、2番目の行に移動し、次に3番目に移動します。しかし、私は両方のプログラムのためにエクスポートされたテキストファイルを取得すると、私はすべての値を含む単一の列を取得します。これは私にとって大したものではありません。 xlsx形式のシンク(「output_long.xlsx」)のRの出力結果をエクスポートしようとしましたが、Excelファイルを取得したとき(4-5時間のループの一定時間が経過した後)、開くことができません。エラーメッセージには、ファイルが破損しているか、ファイルの形式が異なるかのいずれかが表示されます。私はこれを3〜4回試みましたが無駄でした。

どのようにしてこれらの2つのプログラムの結果をExcelファイルにエクスポートすれば、すべての値が1つの列ではなく適切な行列形式になります(つまり、各セルのlat、longの値は対応しますメッシュの対応する十字線のlong、latの値まで)。

また、同じファイル内で1回の実行でlat-long値を取得できるように、これらの2つのプログラムを一緒に実行する方法を教えてもらえればいいです。

+1

シンクは、Excelファイルではなくテキストファイルを作成します。また、ループは必要ありません。私のような何か - <0:10; j < - 0:10; res.-expand.grid(startx-cumsum(i)* dx、starty-cumsum(j)* dy)が動作するはずで、write.csvを使用して結果をエクスポートすることができます。 – Roland

答えて

1

10335 * 11447 = 118304745の緯度/経度値のペアを作成したいようです。それはかなり大きい数字です。あれは正しいですか?しかし、私は小さな例に適用される手順を示します。試してみてください:

#setting the values of parameters 
tllong<-67.481961 
tllat<-36.348639 
deltalong<-0.0030769 
deltalat<-0.002508 
#small example: you can set the following to the real values 
nlong<-10 
nlat<-10 
#create vectors of values without loops 
lat<-seq(tllat,by=deltalat,length.out=nlat) 
lon<-seq(tllong,by=deltalong,length.out=nlong) 
#now we build every possible pair of lat/lon values 
latlong<-expand.grid(lon=lon,lat=lat) 
#we export it to a csv file 
write.csv(latlong,"somefile.csv",row.names=FALSE,quote=FALSE) 

最後にsomefile.csvが作成されます。あなたの価値を考えれば、作成されるファイルは非常に大きくなることに注意してください。

+0

ありがとうございました。あなたは間違いありません。セルの座標として緯度経度の値が必要です。 latとそれに対応するlongの2つの隣接する列でも動作します。私はこのプログラムを実行しようとしましたが、システムがハングアップしてしまい、プロセスを終了する必要がありました。私はなぜこれが起こっているのか分かりません。最後にループプログラムを実行したとき、完全に実行されるのに4〜5時間かかりましたが、それは決して掛かっていませんでした。この問題を解決するために私ができることはありますか? –

+0

何時にハングアップしますか? 'expand.grid()'や 'write.csv()'コールでは? 1億回以上では、ベクトル化されているものの、これは一度に高価なメモリフットプリントになる可能性があります。 @nicolaはベクトル間のすべての可能な組み合わせに対して 'sapply()'または 'outer()'を使ってtxtに繰り返しループするように調整することができます。または、データをチャンクで処理します。 – Parfait

関連する問題