ropensci / rfishbase

R interface to the fishbase.org database
https://docs.ropensci.org/rfishbase
111 stars 40 forks source link

Problem to validate "Abramites ternetzi" #144

Closed reginaldo-re closed 6 years ago

reginaldo-re commented 6 years ago

I am using rfishbase 3.0 and I found a problem validating "Abramites ternetzi".

The results is ok, but when synonyms is called:

Thus, I believe validate_names should returns "Abramites hypselonotus", isn't it?

Thanks in advance, RR.

reginaldo-re commented 6 years ago

I think the solution is something like this:

validate_names <- function(species_list) { synonyms(species_list) %>% dplyr::filter(Status == "accepted name" || Status == "synonym") %>% dplyr::pull(Species) }

cboettig commented 6 years ago

yup, good catch and that's indeed what validate_names should have done. Thanks for the bug report. should be fixed in 3.0 now; feel free to re-open the issue otherwise!

jdstorch commented 5 years ago
> synonyms(c("Barbus trimaculatus", "Neolissochilus hexastichus"))
                     synonym          Status SpecCode SynCode CoL_ID    TSN WoRMS_ID ZooBank_ID TaxonLevel                    Species
1        Barbus trimaculatus   accepted name     5417   31379   <NA> 688769       NA       <NA>    Species        Barbus trimaculatus
2        Barbus trimaculatus misapplied name    11374   20818   <NA>     NA       NA       <NA>    Species            Barbus jacksoni
3        Barbus trimaculatus misapplied name    11448   15792   <NA>     NA       NA       <NA>    Species             Barbus poechii
4        Barbus trimaculatus misapplied name    11458   20888   <NA>     NA       NA       <NA>    Species     Barbus quadripunctatus
5 Neolissochilus hexastichus misapplied name     4644  144752   <NA>     NA       NA       <NA>    Species                    Tor tor
6 Neolissochilus hexastichus   accepted name    61054  149666   <NA> 689497       NA       <NA>    Species Neolissochilus hexastichus
> validate_names("Barbus trimaculatus")
[1] "Barbus trimaculatus"    "Barbus jacksoni"        "Barbus poechii"         "Barbus quadripunctatus"
> validate_names("Neolissochilus hexastichus")
character(0)
> validate_names(c("Barbus trimaculatus", "Neolissochilus hexastichus"))
[1] "Barbus trimaculatus"        "Barbus jacksoni"            "Barbus poechii"             "Barbus quadripunctatus"     "Tor tor"                    "Neolissochilus hexastichus"
> synonyms("Barbus trimaculatus") %>% dplyr::filter(Status=="accepted name")
              synonym        Status SpecCode SynCode CoL_ID    TSN WoRMS_ID ZooBank_ID TaxonLevel             Species
1 Barbus trimaculatus accepted name     5417   31379   <NA> 688769       NA       <NA>    Species Barbus trimaculatus
> synonyms("Barbus trimaculatus") %>% dplyr::filter(Status == "synonym") 
 [1] synonym    Status     SpecCode   SynCode    CoL_ID     TSN        WoRMS_ID   ZooBank_ID TaxonLevel Species   
<0 rows> (or 0-length row.names)
> synonyms("Barbus trimaculatus") %>% dplyr::filter(Status=="accepted name" || Status == "synonym") 
              synonym          Status SpecCode SynCode CoL_ID    TSN WoRMS_ID ZooBank_ID TaxonLevel                Species
1 Barbus trimaculatus   accepted name     5417   31379   <NA> 688769       NA       <NA>    Species    Barbus trimaculatus
2 Barbus trimaculatus misapplied name    11374   20818   <NA>     NA       NA       <NA>    Species        Barbus jacksoni
3 Barbus trimaculatus misapplied name    11448   15792   <NA>     NA       NA       <NA>    Species         Barbus poechii
4 Barbus trimaculatus misapplied name    11458   20888   <NA>     NA       NA       <NA>    Species Barbus quadripunctatus
> synonyms("Neolissochilus hexastichus") %>% dplyr::filter(Status=="accepted name") 
                     synonym        Status SpecCode SynCode CoL_ID    TSN WoRMS_ID ZooBank_ID TaxonLevel                    Species
1 Neolissochilus hexastichus accepted name    61054  149666   <NA> 689497       NA       <NA>    Species Neolissochilus hexastichus
> synonyms("Neolissochilus hexastichus") %>% dplyr::filter(Status=="synonym") 
 [1] synonym    Status     SpecCode   SynCode    CoL_ID     TSN        WoRMS_ID   ZooBank_ID TaxonLevel Species   
<0 rows> (or 0-length row.name
> synonyms("Neolissochilus hexastichus") %>% dplyr::filter(Status=="accepted name" || Status == "synonym") 
 [1] synonym    Status     SpecCode   SynCode    CoL_ID     TSN        WoRMS_ID   ZooBank_ID TaxonLevel Species   
<0 rows> (or 0-length row.names)

This is weird behavior by filter as it short-circuits, I think. The operator for or should be |.

> synonyms("Neolissochilus hexastichus") %>% dplyr::filter(Status=="accepted name" | Status == "synonym") 
                     synonym        Status SpecCode SynCode CoL_ID    TSN WoRMS_ID ZooBank_ID TaxonLevel                    Species
1 Neolissochilus hexastichus accepted name    61054  149666   <NA> 689497       NA       <NA>    Species Neolissochilus hexastichus

compare with

> synonyms("Neolissochilus hexastichus") %>% dplyr::filter(Status %in% c("accepted name","synonym") )
                     synonym        Status SpecCode SynCode CoL_ID    TSN WoRMS_ID ZooBank_ID TaxonLevel                    Species
1 Neolissochilus hexastichus accepted name    61054  149666   <NA> 689497       NA       <NA>    Species Neolissochilus hexastichus

Now we can properly handle the full vector.

> synonyms(c("Barbus trimaculatus","Neolissochilus hexastichus")) %>% dplyr::filter(Status=="accepted name" | Status == "synonym") 
                     synonym        Status SpecCode SynCode CoL_ID    TSN WoRMS_ID ZooBank_ID TaxonLevel                    Species
1        Barbus trimaculatus accepted name     5417   31379   <NA> 688769       NA       <NA>    Species        Barbus trimaculatus
2 Neolissochilus hexastichus accepted name    61054  149666   <NA> 689497       NA       <NA>    Species Neolissochilus hexastichus