2013-10-14 93 views
3

我已將一系列SpatialPolygonsDataFrame加載到我的工作區中。每個命名對象都有附加到國家/地區的"_adm0","_adm1""_adm2"。對於德國,這看起來像"DEU_adm0","DEU_adm1""DEU_adm2"將R組對象放入列表

我想收集所有的「_adm0」數據幀到列表中,然後可以通過ldply和fortify進行操作。我可以這樣做,

mylist <- list(DEU_adm0, FRA_adm0, RUS_adm0, etc...)其中我寫出所有我想列入列表中的國家。

但是,如何通過模式抓取所有的"_adm0"數據幀?

我已經開始與下面的代碼,但它並沒有給我想要的結果是寫出

adm0list <- ls()[str_detect(ls(), "_adm0")] 

mylist <- sapply(adm0list, function(x) get(x)) 

或替代,

mylist <- mget(adm0list, .GlobalEnv) 

我得到與對象的列表sapply方法,並使用mget(),但我不明白爲什麼這些列表不同於直接使用list()與對象名稱。我懷疑這個問題的答案會告訴我爲什麼ldply + fortifylist()方法,但不是其他兩個。

+3

'ls'有圖案的說法。 – joran

+0

謝謝Joran,起初我並不完全瞭解你,但是像Simon在下面的回答,解決了它。 –

+0

啊,好吧,得到參與SO的掛起。 –

回答

5

你可以使用的lspattern參數,然後使用@提取您SPDF對象的data.frame部分...

# Construct list of objects wtih mget 
ll <- mget(ls(pattern = "_adm0")) 

# Extract data.frames 
out <- lapply(ll , function(x) [email protected]) 
+0

Simon,那個代碼很有用,謝謝,但是我後來''outd'''''''''''''''''''''''的調用給了我意想不到的結果。我將不得不再去看防禦。我還以爲我錯過了一步。由於將所有名稱手動引入到list()中,爲我提供了適當格式的'SPDF'。 –

+0

@JakeRuss是的,如果你使用'fortify',它有一個'SPDF'的方法,所以你不需要提取'df'部分。你剛剛在你的作品中提到過,所以我把它放進去了,但在這種情況下,這是沒有必要的。只需使用'mget'調用即可。 –