首页 > 解决方案 > 下载物种发生数据时的for循环问题

问题描述

我想从 gbif 网站下载发生数据,并使用以下 R 脚本。当我运行脚本时,我收到以下消息“错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,:参数暗示不同的行数: 1, 0)"。如果有人能帮我解决这个问题,我将不胜感激。

我的数据:数据

我的 R 脚本:

flist<-read_excel("Mekong fish.xlsx",sheet="Sheet1")

##Loop
fname<-list()
Occ<-list()
datfish<-list()

name_list<-unique(flist$Updated_name)

# create for loop to produce ggplot2 graphs 
for (i in seq_along(name_list)) { 

  # create plot for each Occurrence in df 
  Occ[[i]] <-occ_search(scientificName = name_list[i], limit=2)

  fname[[i]]<-occ_search(scientificName = name_list[i],
           fields = c("species", "country","decimalLatitude", "decimalLongitude"),
           hasCoordinate=T, limit= Occ[[i]]$meta[4],return ="data")
  datfish[[i]]<-as.data.frame(fname[[i]]$data)

}

标签: r

解决方案


我得到了一个不同的错误:

在 D1424 / R1424C4 中期望逻辑:在老挝得到'在 D1426 / R1426C4 中得到逻辑:在中国得到'在 D1467 / R1467C4 中得到逻辑:在 D1469 / R1469C4 中得到'只有柬埔寨'期望在 D1469 / R1469C4 中符合逻辑:在 VN 中得到'仅在 VN'期望在 D1473 / R1473C4 中符合逻辑:在 D1486 / R1486C4 中符合逻辑:在 D1486 / R1486C4 中符合逻辑:在 D1488 / R1488C4 中符合逻辑:在 VN 中只有 1 分

我认为问题是在第 4 列的某些字段中引起的。我没有安装正确的软件包来运行您的代码。但是一旦我删除了第四列,我得到了一个不同的错误(包丢失)。

flist<-read_excel("~/Downloads/Mekong fish.xlsx",sheet="Sheet1")

flist <=subset(flist, select = -4)

...

编辑:

这对我有用。read_excel为第 4 列分配了布尔类型。当我明确将其设置为文本时,它起作用了。

library(readxl)
library(rgbif)
library(raster)

flist<-read_excel("~/Downloads/Mekong fish.xlsx",
                  sheet="Sheet1", 
                  col_types = c("numeric", "text", "numeric", "text"))

flist

##Loop
fname<-list()
Occ<-list()
datfish<-list()

name_list<-unique(flist$Updated_name)


# create for loop to produce ggplot2 graphs 
for (i in seq_along(name_list[1:2])) { 
  message(i)
  # # create plot for each Occurrence in df 
  Occ[[i]] <-occ_search(scientificName = name_list[i], limit=2)
  message(Occ[[i]])
  fname[[i]]<-occ_search(scientificName = name_list[i],
           fields = c("species", "country","decimalLatitude", "decimalLongitude"),
           hasCoordinate=T, limit= Occ[[i]]$meta[4],return ="data")
  message(fname[[i]])
  datfish[[i]]<-as.data.frame(fname[[i]]$data)
  message(datfish[[i]])
}

> 1
> list(offset = 0, limit = 2, endOfRecords = FALSE, count = >15)list(list(name = c("Animalia", "Chordata", "Actinopterygii", 
> "Cypriniformes", "Cyprinidae", "Aaptosyax", "Aaptosyax grypus"), key = > > c("1", "44", "204", "1153", "7336", "2363805", "2363806"),
> etc...

推荐阅读