puremoe provides a unified interface to PubMed and NLM
data. Search with search_pubmed(), then retrieve data from
any of five endpoints with get_records().
search_pubmed() accepts standard PubMed query syntax and
returns a vector of PMIDs.
pmids <- puremoe::search_pubmed('("political ideology"[TiAb])')
length(pmids)#> [1] 954
pmids_sub <- head(pmids, 50L)
abstracts <- puremoe::get_records(
pmids_sub,
endpoint = "pubmed_abstracts",
cores = 1L,
sleep = 0.5
)The annotations column is a list of per-article data
frames containing MeSH terms, chemical names, and keywords.
affiliations <- puremoe::get_records(
head(pmids_sub, 25L),
endpoint = "pubmed_affiliations",
cores = 1L,
sleep = 0.5
)
affiliations |>
DT::datatable(rownames = FALSE)
icites <- puremoe::get_records(
pmids_sub,
endpoint = "icites",
cores = 1L,
sleep = 0.25
)
icites |>
select(-citation_net, -cited_by_clin) |>
DT::datatable(rownames = FALSE, options = list(scrollX = TRUE))
pubtations <- puremoe::get_records(
head(pmids_sub, 30L),
endpoint = "pubtations",
cores = 1L
)
pubtations |>
DT::datatable(rownames = FALSE)Full-text retrieval requires open-access PMC articles.
pmid_to_ftp() resolves PMIDs to XML URLs via the PMC Cloud
Service on AWS S3, filtering to only those with open-access full text
available. In August 2026, NCBI will complete its migration from the
legacy PMC FTP Service to the Cloud Service; puremoe
already uses the new service.
ftp <- puremoe::pmid_to_ftp(pmids = pmids_sub)
ftp |> DT::datatable(rownames = FALSE, options = list(scrollX = TRUE))endpoint_info() returns column definitions, rate limits,
and notes for any endpoint.
puremoe::endpoint_info()#> [1] "pubmed_abstracts" "pubmed_affiliations" "icites"
#> [4] "pubtations" "pmc_fulltext"
puremoe::endpoint_info("icites")#> $description
#> [1] "NIH iCite citation metrics, influence scores, and citation links"
#>
#> $source
#> [1] "NIH iCite"
#>
#> $input
#> [1] "PMIDs"
#>
#> $returns
#> [1] "data.table; one row per PMID returned by iCite"
#>
#> $columns
#> $columns$pmid
#> [1] "PubMed ID; join key for other puremoe endpoints (character)"
#>
#> $columns$citation_count
#> [1] "Total citations received"
#>
#> $columns$relative_citation_ratio
#> [1] "Relative Citation Ratio (RCR), rounded to three decimals"
#>
#> $columns$nih_percentile
#> [1] "Percentile rank relative to NIH-funded publications"
#>
#> $columns$field_citation_rate
#> [1] "Expected citation rate for the article's co-citation field"
#>
#> $columns$is_research_article
#> [1] "Flag indicating whether iCite classifies the article as research"
#>
#> $columns$is_clinical
#> [1] "Flag indicating whether iCite classifies the article as clinical"
#>
#> $columns$provisional
#> [1] "Flag indicating provisional RCR status for recent publications"
#>
#> $columns$citation_net
#> [1] "List-column of directed citation edges with 'from' and 'to' PMIDs, built from iCite cited-by and reference fields. Covers PubMed-indexed articles only; citations from preprints or sources outside PubMed are not included."
#>
#> $columns$cited_by_clin
#> [1] "Clinical citing PMIDs as returned by iCite"
#>
#>
#> $parameters
#> $parameters$cores
#> [1] "parallel workers"
#>
#> $parameters$sleep
#> [1] "delay between requests, in seconds"
#>
#>
#> $rate_limit
#> [1] "Relatively permissive"
#>
#> $notes
#> [1] "Title, journal, publication year, authors, and abstracts are intentionally omitted to avoid duplicating pubmed_abstracts metadata. Use citation_net with citation_snowball() or citation_network(). iCite citation links cover PubMed-indexed articles only; citations from preprints or sources outside PubMed are not included."