我试图从包含信息的数据库中获取坐标信息的包特定函数(Red :: records)获取物种名称给定数据框中每个物种的GPS坐标信息关于物种分布。R:For Loop复制错误
我的for循环如下构造,其中迭代是nrow(名称)和函数记录返回经/纬度坐标:
for(i in 1:iterations){
gbif[i,1] <- names[i,] ## grab names
try(temp1 <- records(names[i,]))
try(temp1$scientificName <- names[i,])
try(temp2 <- merge(gbif, temp1, by.x="V1", by.y="scientificName"))
datalist[[i]] <- temp2
}
执行这个循环之后,我能够获得品种数据;但是,它不适合与名单合并。例如,调用记录(“Agyneta flibuscrocus”)正确返回5个唯一经纬度坐标,而调用记录(“Agyneta mongolica”)会在找到0条记录时产生错误(这对每个物种在网上检查时都有效)。
这个循环之后,我绑定所有的获得记录到一个单一的数据帧使用:
dat = do.call(rbind, datalist) ## merge all occurrence data from GBIF into
one data frame
dat <- unique(dat)
当我去验证这个数据帧,我得到下面的示例数据:
Agyneta flibuscrocus -115.58400 49.72
Agyneta flibuscrocus -117.58400 51.299
...
Agyneta mongolica -115.58400 49.72
Agyneta mongolica -117.58400 51.299
这些错误的复制也会在200个名称的其余部分重复。作为附注,我将所有内容都包含在try语句中,因为如果代码运行到从数据库中产生0结果的记录中,代码将不会执行。
我觉得我在这里忽略了一些非常明显的东西?
重复性的数据&代码:
install.packages("red")
library(red)
names = data.frame("Acantheis variatus", "Agyneta flibuscrocus", "Agyneta
mongolica", "Alpaida alticeps", "Alpaide venilliae", "Amaurobius
transversus", "Apochinomma nitidum")
iterations = nrow(names)
datalist = list()
temp1 <- data.frame() ## temporary data frame for joining occurrence data
from GBIF
for(i in 1:iterations){
gbif <- names[i,] ## grab name
try(temp1 <- records(gbif))
try(temp1$V1 <- gbif)
datalist[[i]] <- temp1
}
dat = do.call(rbind, datalist)
请提供如所描述的一些示例性数据(这里)(https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 –
@tobiasegli_te我的不好,感谢让我排队:) –