ropensci / rAltmetric

Query and visualize metrics from altmetric.com
https://docs.ropensci.org/rAltmetric
Other
48 stars 18 forks source link

Error in altmetrics: No metrics found for object #24

Open gorkang opened 6 years ago

gorkang commented 6 years ago

Right now, if you search for a DOI that does not have altmetric data, you get an error "No metrics found for object". Would it be possible for the function to just send a warning when the DOI is not found?

For example, if you do:

altmetrics(doi = "10.22199/s07187475.2015.0001.00004")

You will get:

Error in altmetrics(doi = "10.22199/s07187475.2015.0001.00004") : No metrics found for object

The main issue is that if I want to get the altmetric data for a group of papers, I have to include ways to keep on going when there is an error, so, something like this fails miserably:

DOIS = c("10.22199/s07187475.2015.0001.00004", "10.1093/brain/aww231", "10.1038/s41562-017-0118")
altmetrics_lists = DOIS %>% map( ~ altmetrics(doi = .x))
altmetrics_df = altmetrics_lists %>% map_df(~rAltmetric::altmetric_data(.x))

If I remove the offending DOI, I can get all the altmetric info easily:

DOIS = c("10.1093/brain/aww231", "10.1038/s41562-017-0118")
altmetrics_lists = DOIS %>% map( ~ altmetrics(doi = .x))
altmetrics_df = altmetrics_lists %>% map_df(~rAltmetric::altmetric_data(.x))

As far as I can see, changing: error("No metrics found for object") for warning("No metrics found for object") would suffice?

gorkang commented 6 years ago

Just to be sure, I can do what I need with the following code, but it seems a bit too complex:

DOIS = c("10.22199/s07187475.2015.0001.00004", "10.1093/brain/aww231", "10.1038/s41562-017-0118")
altmetrics_lists = DOIS %>% map( ~ tryCatch( {altmetrics(doi = .x)},
                                             error = function(e) {
                                             cat(paste0("•Error• ", .x, "\n"))
                                             }))

altmetrics_lists[sapply(altmetrics_lists, is.null)] <- NULL
altmetrics_df = altmetrics_lists %>% map_df(~rAltmetric::altmetric_data(.x))
karthik commented 6 years ago

👋 @gorkang Thanks for this report. I will change the behavior in an upcoming update. In the meantime, it is fairly simple to catch errors and skip them with some tidyverse code. See an example I wrote for another user yesterday:

https://gist.github.com/karthik/78016fc78d52156561f5f543defb7ec0