2014-09-03 114 views
0

親愛的人,stackoverflow。在for循環中計算R中多邊形的面積

我想計算一個SPDF的每個單獨的多邊形的面積。我正在嘗試製作一個功能,它允許我將數據輸入並獲取一個區域列表。我堅持創建一個返回我的多邊形的所有區域的for循環。對於一個多邊形的表面計算下面的代碼工作:

surfacefirstpolygon <- gArea(inputSPDF[1,1]) 

此代碼打印由一個我的一個當我運行下面的代碼。

polys <- slot(inputSPDF,"polygons") 
for(i in 1:length(polys)){ 
    print(i) 
} 

然後我試圖把這些碎片的代碼一起在for循環中執行以下操作:

polys <- slot(inputSPDF,"polygons") 
areasofpolygons <- for(i in 1:length(polys)){ 
    gArea(inputSPDF[i,i]) 
} 

這不工作,給我下面的錯誤。

錯誤is.projected(spgeom):在評價選擇用於功能 'is.projected' 的方法 'OBJ' 參數 錯誤:在[.data.frame錯誤(X @數據,I,J,..., drop = FALSE): 未定義的列被選中。

有人知道發生了什麼問題嗎?

結果=

dd = dim(inputSPDF) 
for(i in 1:dd[1]){ 
    areasofpolygons[i] <- gArea(inputSPDF[i,1]) 
} 
+0

我想這可能是因爲列表無法將它們置於彼此之下。所以我嘗試了以下也不起作用: test < - list() for(i in 1:length(polys)){ test [i] < - gArea(gem_ned_LAEA [i,i]) } – Zuenie 2014-09-03 08:47:02

+0

什麼是數據和gArea?這是不可複製的!順便說一句:R中沒有列表理解機制,你試圖這樣做。看看[應用功能](http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/)來實現這樣的事情。 – 2014-09-03 08:58:03

+0

數據是我的輸入數據,gArea是計算多邊形表面的包rgeos的函數。感謝您申請鏈接。現在看看它。 關於可重複性:我正在使用SpatialPolygonDataFrame。從頭開始製作一個並不容易。在我問的另一個問題中,我將腳本鏈接到了保存箱,並讓人們從我的保存箱中下載我的shapefile文件。然後我得到了這可能是不安全的評論。我不知道如何使它成爲一個更好的可重複的腳本。 – Zuenie 2014-09-03 09:01:11

回答

1

嘗試:

dd = dim(inputSPDF) 
for(i in 1:dd[1]) for(j in 1:dd[2]){ 
     areasofpolygons[length(areasofpolygons)+1] = gArea(inputSPDF[i,j]) 
    } 
areasofpolygons 

在問題中提到的錯誤可能表示i被超過的尺寸( 「選擇的未定義的列」)。另外,如果使用[i,i],則只會訪問相同的行和列號。

+1

爲了讓它成爲一個很好的答案,請在代碼的作用和方式上添加一些評論。 – 2014-09-03 10:39:46

+1

我已經添加了一些信息。來自@Zenie的反饋也將不勝感激。 – rnso 2014-09-03 11:15:30

+0

當我運行這些線時,它會運行相當長的時間(如5分鐘),然後返回一個空的areasofpolygons。它不返回錯誤。但是,謝謝你已經幫助我!我不明白爲什麼在我的第一個腳本中列的數量也是錯誤的。 – Zuenie 2014-09-03 11:23:32