## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set(collapse = FALSE, comment = "") # Console colour carries no meaning on a rendered page. pkgdown turns it on for # its own build, and the escape sequences then reach the reader as literal text, # so colour is switched off here for a plain vignette render and a site build # alike. The fixed width keeps tibbles inside the documentation column. options(cli.num_colors = 1, cli.hyperlink = FALSE, crayon.enabled = FALSE, width = 80) # Print data frames and tibbles as formatted tables. local({ kp <- function(x, ...) { if (any(vapply(x, is.list, logical(1)))) return(knitr::normal_print(x)) knitr::knit_print(knitr::kable(x)) } for (cls in c("data.frame", "tbl_df", "tbl")) { registerS3method("knit_print", cls, kp, envir = asNamespace("knitr")) } }) ## ----setup-------------------------------------------------------------------- library(scopusflow) ## ----------------------------------------------------------------------------- plan <- scopus_plan( "graphene supercapacitor", years = 2015:2024, field = "TITLE-ABS-KEY", partition = "year" ) plan ## ----------------------------------------------------------------------------- scopus_plan("language learning", field = "TITLE")$query scopus_plan("x", years = 2015:2020)$date # A plan is a classed object, and is_scopus_plan() confirms it. is_scopus_plan(plan) ## ----------------------------------------------------------------------------- scopus_has_key() ## ----eval = FALSE------------------------------------------------------------- # scopus_count( # "graphene supercapacitor", # years = 2015:2024, # field = "TITLE-ABS-KEY" # ) # # records <- scopus_fetch_plan( # plan, # cache_dir = scopus_cache_dir(), # resume = TRUE # ) ## ----------------------------------------------------------------------------- records <- example_records summary(records) head(records) # A record set is a classed tibble, and is_scopus_records() confirms the # contract. is_scopus_records(records) ## ----------------------------------------------------------------------------- raw <- list(entry = list( list(`prism:doi` = "10.1021/am509065d", `dc:title` = "Flexible and Stackable Laser-Induced Graphene Supercapacitors", `dc:creator` = "Zhiwei Peng", `prism:publicationName` = "ACS Applied Materials & Interfaces", `prism:coverDate` = "2015-01-13", `citedby-count` = "469") )) scopus_records(raw, query = "TITLE-ABS-KEY(graphene supercapacitor)") ## ----------------------------------------------------------------------------- scopus_top(records, by = "source") ## ----------------------------------------------------------------------------- dois <- scopus_extract_dois(records) length(dois) head(dois, 4) ## ----------------------------------------------------------------------------- baseline <- records[records$year <= 2023, ] later <- records[-1, ] print(scopus_diff_dois(old = baseline, new = later)) ## ----------------------------------------------------------------------------- out <- file.path(tempdir(), "dois.csv") scopus_extract_dois(records, file = out) writeLines(head(readLines(out), 5)) ## ----eval = FALSE------------------------------------------------------------- # cmp <- scopus_compare_topics( # reference_query = "language learning", # comparison_terms = c("effect size", "Bayesian"), # years = 2015:2020, # field = "TITLE-ABS-KEY" # ) # plot_scopus_comparison(cmp) ## ----------------------------------------------------------------------------- m <- as_bibliometrix(records) head(m[, c("AU", "TI", "PY", "SO", "TC")]) path <- file.path(tempdir(), "records.rds") write_scopus_records(records, path) identical(read_scopus_records(path), records) ## ----------------------------------------------------------------------------- report <- scopus_search_report(records, plan = plan) cat(format(report, style = "paragraph")) ## ----eval = FALSE------------------------------------------------------------- # tryCatch( # scopus_fetch("..."), # scopus_error_no_key = function(e) message("No API key configured."), # scopus_error_rate_limit = function(e) # message("Rate limited, so backing off."), # scopus_error = function(e) # message("Scopus error: ", conditionMessage(e)) # )