如何保存通过rgbif下载的个别物种数据?

时间:2014-11-23 12:52:15

标签: r csv

我有一个物种列表,我想使用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种以上的数据?

谢谢!

1 个答案:

答案 0 :(得分: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)
}