2016-12-17 41 views
-1

對於某個地理區域,我有一個方形和經度網格。但是我只知道這個網格的四個角的經度和緯度值。使用這些我需要計算所有十字線上的經緯度值。所以,我分別在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<-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() 

tllat是左上角網格正方形的緯度值。

因此,您可以看到循環首先計算第一行的所有lat,long值然後轉到第二行,然後第三行,依此類推。但是,當我得到兩個程序的導出文本文件時,我會得到包含所有值的單個列。這對我來說沒什麼用處。我試圖用xlsx格式使用sink(「output_long.xlsx」)導出R的輸出結果,但是當我得到excel文件(4-5小時的恆定長循環後),我無法打開它。錯誤消息顯示文件已損壞或文件格式不同。我已經嘗試過3-4次,但徒勞無功。

那麼如何將這兩個程序的結果導出到excel文件中,這樣我就不會在單個列中獲得所有值,而是以適當的矩陣形式(即lat,long的值在每個單元格中對應到lat的值,在網格的相應的十字線中爲long)。

此外,如果有人能告訴我如何將這兩個程序一起運行,以便我可以在同一個文件中的單次運行中獲得lat-long值,那將是非常好的。

+1

水槽創建一個文本文件不是一個Excel文件。你也不需要任何循環。像我< - 0:10; j < - 0:10; res < - expand.grid(startx - cumsum(i)* dx,starty - cumsum(j)* dy)應該可以工作,然後您可以使用write.csv或甚至一個可以創建excel文件的包導出結果。 – 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值作爲單元格中的座標。甚至拉特的兩個相鄰列及其相應的長也將起作用。我試着運行這個程序,但是我的系統被掛起,我不得不終止這個過程。我不知道爲什麼會發生這種情況。上次我運行我的循環程序時,完成執行需要大約4-5個小時,但它從未被絞死過。有什麼我可以做的解決這個問題? –

+0

它在什麼時候掛起?在'expand.grid()'或'write.csv()'調用?在1億+以上時,儘管它們是矢量化的,但它們可能是昂貴的內存足跡。對於向量之間的所有可能組合,@nicola可以通過'sapply()'或'outer()'調整循環迭代地轉儲到txt。或以塊處理數據。 – Parfait