2015-02-05 67 views
0

我使用下面的代碼創建了r中的SpatialPolygons對象列表,並希望通過for循環運行每個多邊形。我想訪問我分配給每個對象的原始名稱,以便它可以在for循環中使用。這應該是非常簡單的,但我無法弄清楚如何用SpatialPolygons對象來做到這一點,因爲一旦加載到將該鏈接到該原始名稱的for循環中,就沒有存儲在該對象中的信息。任何幫助都會很棒。謝謝!從列表中訪問SpatialPolygons對象的名稱

oblist = c(p1,p2,p3,p4) 

for(i in 1:length(oblist)){ 
    obs = oblist[[i]] 
    obj.nm = #some way to obtain the original object name i.e. p1 for oblist[[1]] 
    …#etc# 

} 

回答

1

使用列表由指定組件,而不是一個向量:

> oblist = list(p1=p1, p2=p2, p3=p3, p4=p4) 
> for(i in 1:length(oblist)){ 
+ print(names(oblist)[i]) 
+ print(oblist[[i]]) 
+ } 

注意,一個變量的名稱應該很少會感興趣的代碼。這種反思是不鼓勵的。很少有語言允許它。變量不應該能夠詢問它的名字是什麼。它只在極少數情況下,比如當你做plot(foo,bar),並且你想把軸標爲foobar時,你應該這樣做。

最好有另一個存儲對象元素名稱的變量(這是上述代碼的工作方式,通過將它們的名稱存儲在列表的names屬性中)。這也可以讓你的名字不是有效的變量名。

+0

@ Spacedman:非常好。謝謝!正是我在找的東西。很明顯,我不相信我錯過了它! – jjulip 2015-02-05 20:02:15

相關問題