Closed reginaldo-re closed 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) }
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!
> 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
I am using rfishbase 3.0 and I found a problem validating "Abramites ternetzi".
validate_names("Abramites ternetzi") returns character(0).
curl "https://fishbase.ropensci.org/species?genus=Abramites&species=ternetzi" returns {"count":0,"returned":0,"data":null,"error":{"message":"no results found"}}
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.