2014-11-23 13 views
0

我有一個物種清單,我想使用rgbif從它們下載出現數據。我試着用兩種物種的代碼,假設當我得到它的工作爲兩個讓它爲實際(和更長的)列表工作將不會是一個問題。這裏是我使用的代碼:如何保存通過rgbif下載的單個物種數據?

#Start 
library(rgbif) 
splist <- c('Acer platanoides','Acer pseudoplatanus') 
keys <- sapply(splist, function(x) name_suggest(x)$key[1], USE.NAMES=FALSE) 
OS1=occ_search(taxonKey=keys, fields=c('name','key','decimalLatitude','decimalLongitude','country','basisOfRecord','coordinateAccuracy','elevation','elevationAccuracy','year','month','day'), minimal=FALSE,limit=10, return='data') 
OS1 
#End 

這個位的工作幾乎完美。我得到兩個物種的物種數據。一個物種缺少一些列,但我現在假設這是數據問題,而不是代碼。我試過的下一行 -

write.csv(OS1, "os1.csv") 

當保存單個物種但沒有超過一個物種時工作正常。有人可以幫忙嗎?如何將每個物種的數據保存爲單獨的文件,記住我還希望該方法適用於超過2種物種的數據?

謝謝!

+0

我看到您的問題已在下面得到解答。我是'rgbif'的主要作者,如果您有任何問題,請告訴我。 – sckott 2014-11-23 14:34:54

回答

0

結果是一個列表,這意味着您可以使用R的函數來爬上每個列表元素並保存它。以下代碼提取物種名稱(您可能已經在某處放置了這些名稱),並使用mapply來配對物種數據和文件名,並使用它來保存.txt文件。

filenames <- paste(sapply(sapply(OS1, FUN = "[[", "name", simplify = FALSE), unique), ".txt", sep = "") 

mapply(OS1, filenames, FUN = function(x, y) write.table(x, file = y, row.names = FALSE)) 

這類似於一個for循環解決方案,但有些人可能會認爲一個更簡潔的一個。

for (i in 1:length(filenames)) { 
    write.table(OS1[[i]], file = filenames[i], row.names = FALSE) 
} 
相關問題