繁体   English   中英

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

[英]How do I save individual species data downloaded via 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种以上物种的数据,我如何将每种物种的数据保存为单独的文件?

谢谢!

结果是一个列表,这意味着您可以使用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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM