LimaRAF / plantR

An R Package for Managing Species Records from Biological Collections
GNU General Public License v3.0
17 stars 4 forks source link

Error in tax.check #87

Closed leilameyer08 closed 2 years ago

leilameyer08 commented 2 years ago

Oi @LimaRAF e pessoal!

Estou montando um banco de dados de Melastomataceae para o Quadrilátero Ferrífero de Minas Gerais a partir dos registros de ocorrência do GBIF, speciesLink e BIEN. Estou usando o plantR para fazer a limpeza dos registros e o pacote tem funcionando super bem! Mas acabei encontrando dois probleminhas: 1°) Na checagem da qualidade das identificações alguns registros sem identificador (estão como s.n.) estão sendo classificados com alta qualidade ("high"). Acho que esses registros deveriam estar na categoria de "unknown"; 2°) A função ValidateDup() está retornando o mesmo erro reportado pelo WevertonBio: Error in x1$col.year[ids] <- as.character(sapply(strsplit(x1$col.year[ids], : NAs are not allowed in subscripted assignments

Esse é código que estou usando:

### Installation ####
# install.packages("remotes")
#require("remotes")
#install_github("LimaRAF/plantR")
require("plantR")
#devtools::install_github("bmaitner/RBIEN")
require("BIEN")

### Download occurrence data ###
#### Download occurrence data from BIEN ####
occ.BIEN <- BIEN_occurrence_state(country = "Brazil",
                                  state = "Minas Gerais",
                                  cultivated = F,
                                  new.world = T,
                                  all.taxonomy = T,
                                  native.status = F,
                                  natives.only = T,
                                  observation.type = T,
                                  political.boundaries = T,
                                  collection.info = T)

occ.BIEN <- occ.BIEN[occ.BIEN$scrubbed_family == "Melastomataceae", ]
dim(occ.BIEN)

### Download occurrence data from speciesLink ###
occ.splink <- rspeciesLink(basisOfRecord = "PreservedSpecimen",
                           family = "Melastomataceae",
                           country = "Brazil",
                           stateProvince = "Minas Gerais",
                           Scope = "plants",
                           Synonyms = "flora2020",
                           MaxRecords = 100000)
dim(occ.splink)

### Download occurrence data from GBIF ###
occ.gbif <- rgbif2(dir = "data/raw",
                   filename = "output.gbif",
                   species = "Melastomataceae",
                   country = "BR",
                   stateProvince = "Minas Gerais",
                   n.records = 100000,
                   force = T,
                   basisOfRecord = "PRESERVED_SPECIMEN")
dim(occ.gbif)

### Combine database using formatDwc() function ###
occs.all <- formatDwc(splink_data = occ.splink,
                      gbif_data = occ.gbif,
                      bien_data = occ.BIEN,
                      fix.encoding = c("splink_data", "gbif_data", "bien_data"),
                      drop = T, bind_data = T)
dim(occs.all)

### Data editing ###

#### Collection codes, people names, collector number and dates ####
occs.all.2 <- formatOcc(occs.all)
dim(occs.all.2)

#### Locality information ####
occs.all.3 <- formatLoc(occs.all.2)
dim(occs.all.3)

#### Geographical coordinates ####
occs.all.4 <- formatCoord(occs.all.3)
dim(occs.all.4)

#### Species and family names ####
occs.all.5 <- formatTax(occs.all.4, db = "bfo")
dim(occs.all.5)

### Data validation ####

#### Locality information
occs.all.6 <- validateLoc(occs.all.5)
dim(occs.all.6)

#### Geographical coordinates
occs.all.7 <- validateCoord(occs.all.6, output = "new.col")
dim(occs.all.7)

#### Species taxonomy and identification
occs.all.8 <- validateTax(occs.all.7,top.det    = 200,
                          generalist = T)

high_s.n. <- occs.all.8[which(occs.all.8$tax.check == "high" & 
                                occs.all.8$identifiedBy.new == "s.n."),]
dim(high_s.n.) # 8535 registros classificados com alta qualidade de identificação, mas estão sem identificador.

#### Duplicate specimens
occs.all.9 <- validateDup(occs.all.8, merge = T, prop = 0.01,
                          ignore.miss   = T, remove = T)

# Error in x1$col.year[ids] <- as.character(sapply(strsplit(x1$col.year[ids],  : 
# NAs are not allowed in subscripted assignments

Muito obrigada mais uma vez!

LimaRAF commented 2 years ago

Oi @leilameyer08,

Obrigado pelas checagens e pelo retorno.

Sobre seus pontos:

1o) Isso pode acontecer caso se trate do especimen tipo da espécie (holotipo, isotipo, etc) ou caso o coletor da espécie seja o próprio especialista da família (isso dá pra controlar usando os argumentos da função). Você poderia por favor verificar se são esses os seus casos?

2o) Parece sim mesmo que o mesmo erro que o erro reportado pelo WevertonBio. Me parece ser algo pequeno, mas ainda não consegui parar para ver isso. Assim que descobrir o problema, te retorno.

leilameyer08 commented 2 years ago

Oi @LimaRAF ,

Muito obrigada pelo retorno e orientações!

A questão de ter registros sem identificador como alta qualidade são os casos que você colocou mesmo (especime do tipo e coletas de especialistas). Então está tudo certo com a função!

Sobre o segundo problema, não tem pressa no meu caso porque quando filtro os registros de Melastomataceae de Minas Gerais para o Quadrilátero Ferrífero, a função validateDup() roda normalmente e o problema desaparece. Era só mesmo para reportar o erro com o conjunto de dados maior.

Muito obrigada mais uma vez!

LimaRAF commented 2 years ago

Oi @leilameyer08,

Obrigado pelas confirmações. Hoje consegui olhar o problema que vc e o @WevertonBio mencionaram.

Contudo, fui encontrando e resolvendo vários outros problemas no caminho referentes a uma mudança de como as funções stringr::str_trim() e stringr::str_squish() retornam characteres non-ascii. Troquei (quase) todas as linhas de código com essas funções para evitar esses erros e no fim não consegui mais reproduzir o erro que vcs mencionarem.

Rodei o seu código e me parece estar tudo ok agora. Peço por favor de re-instalar o pacote do branch 'dev' e testar na sua máquina tb. Se estiver tudo certo, pf me avise para que eu possa fazer o PR para o master do plantR.

Abs, Renato

leilameyer08 commented 2 years ago

Oi @LimaRAF,

Muito obrigada pelo retorno e por todo o empenho em resolver os problemas que aparecem.

Eu instalei o pacote novamente usando:

install_github("LimaRAF/plantR", ref = "dev", force = T)

Rodei e o erro continua:

occs.all.9 <- validateDup(occs.all.8)
Error in x1$col.year[ids] <- as.character(sapply(strsplit(x1$col.year[ids],  : 
  NAs are not allowed in subscripted assignments

Mas quando substitui células vazias da coluna "year.new" por "n.d.", a função validateDup() rodou:

occs.all.9 <- validateDup(occs.all.8)
Error in x1$col.year[ids] <- as.character(sapply(strsplit(x1$col.year[ids],  : 
  NAs are not allowed in subscripted assignments

occs.all.8[which(occs.all.8$year.new == ""), "year.new"] <- "n.d."
occs.all.9 <- validateDup(occs.all.8)
60002 truly duplicate records (same record in different sources) were removed from the data
Warning message:
In igraph::graph_from_data_frame(d[, .(numTombo, value)]) :
  In `d' `NA' elements were replaced with string "NA"

Obrigadão!!

LimaRAF commented 2 years ago

Oi @leilameyer08,

Desculpe a demora, mas só agora conseguir olhar o erro que você relatou. Acabei de fazer um commit para o branch dev, deve estar resolvido. Rodei o seu código e me parece estar tudo ok agora. Peço por favor de re-instalar o pacote do branch 'dev' e testar na sua máquina tb. Se estiver tudo certo, pf me avise para que eu possa fazer o PR para o master do plantR.

Fiz algumas pequenas melhorias na função de edição de localidades tb, mas que talvez justifiquem rodar seus códigos de novo.

Abs, Renato

LimaRAF commented 2 years ago

Ah, @leilameyer08 , e se vocês tiverem sugestões de nomes de taxonomistas de Melastomataceae para inclusão no dicionário do plantR, me avise por favor?

leilameyer08 commented 2 years ago

Oi @LimaRAF,

Desculpa a demora em te responder. Eu testei agora a função validateDup() e está funcionando direitinho. Vou ver com a Maria Rocha para organizarmos uma lista com nomes dos taxonomistas de Melastomataceae.

Obrigadão por toda assitência com o pacote! Abraços

LimaRAF commented 2 years ago

Obrigado @leilameyer08 ! Pelo teste e pela atualização da lista de nomes de especialistas. Quando tiver nomes adicionais, por favor, nos envie e eu incluo no dicionário do pacote.