Programmatic access, analysis, and visualization of integer sequences from the On-Line Encyclopedia of Integer Sequences (OEIS) < https://oeis.org>. Fetches sequence metadata and b-files, stores terms as arbitrary-precision integers via 'gmp', and plots them with 'ggplot2'.
R interface to the Online Encyclopedia of Integer Sequences (OEIS). Fetches sequence metadata and b-files, parses them into S3 objects (Sequence, BFile), and plots terms with ggplot2. Terms are stored as gmp::bigz values, so precision is not lost for sequences whose terms exceed double-precision range.
This is the R port of oeis-tools, the Python package by the same author. The public API (function and class names) matches the Python package where R's type system and idioms allow it.
# install.packages("pak")
pak::pak("oeistools/oeis-tools-R")
library(oeis.tools)
fib <- Sequence("A000045")
fib$name
# [1] "Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1."
fib$keyword
# [1] "core" "nonn" "nice" "easy" "look" "hear" "changed"
fib$author
# [1] "N. J. A. Sloane"
fib$data
# gmp bigz vector of the terms given in the OEIS entry
Sequence also exposes data_raw, offset, comment, reference, formula, example, maple, mathematica, program, xref, references, revision, m_id, n_id, time, created, link (OEIS link field reformatted to Markdown), and bfile (an embedded BFile).
B-files contain more terms than the main entry (often thousands).
primes <- BFile("A000040")
get_bfile_data(primes)[1:10]
get_bfile_indices(primes)[1:10]
plot_data(primes, n = 1000, color = "royalblue")
plot_data() accepts plot_style = "line" | "joined" | "scatter", p to layer onto an existing ggplot object, and return_plot = TRUE to get the object back instead of (or in addition to) printing it. When a term exceeds double-precision range, the plot falls back to a signed log10(|value|) axis rather than truncating or erroring.
create_bfile("A999999", data = c(1, 1, 2, 3, 5, 8), offset = 0, output_path = tempdir())
# [1] "/tmp/RtmpXXXX/b999999.txt"
get_xref_ids(fib)
# [1] "A000032" "A000071" "A000108" ...
oeis_keyword_description("core")
# [1] "A fundamental sequence."
png_bytes <- get_graph_png(fib) # cached after first call
get_graph_image(fib) # displays inline under IRkernel; else returns raw bytes
cat(get_bibtex(fib))
# @misc{A000045,
# author = {N. J. A. Sloane},
# title = {A000045: Fibonacci numbers: F(n) = F(n-1) + F(n-2) with F(0) = 0 and F(1) = 1.},
# howpublished = {The {O}n-{L}ine {E}ncyclopedia of {I}nteger {S}equences},
# year = {1991},
# month = apr,
# day = {30},
# date = {1991-04-30},
# url = {https://oeis.org/A000045}
# }
| Function | Applies to | Description |
|---|---|---|
Sequence(oeis_id) |
— | Fetch and parse an OEIS entry from the JSON API |
BFile(oeis_id) |
— | Fetch and parse a b-file |
create_bfile(oeis_id, data, offset, output_path) |
— | Write a b-file to disk |
check_id(oeis_id) |
— | Validate an OEIS id (^A\d{6}$) |
oeis_url(oeis_id, fmt) |
— | Build an OEIS URL (json, text, bfile, graph) |
oeis_bfile(oeis_id) |
— | Build a b-file filename |
oeis_keyword_description(tag) |
— | Look up an OEIS keyword tag description |
extract_oeis_ids(text) |
— | Extract A\d{6} ids from text |
get_bfile_data, get_bfile_indices, get_filename, get_url |
BFile |
Accessors |
get_bfile_info, get_xref_ids, get_data_values, get_keyword_description, get_graph_png, get_graph_image, get_bibtex |
Sequence |
Derived metadata |
plot_data(x, ...) |
BFile |
ggplot2 line/scatter plot |
plot(x, ...) |
Sequence |
Delegates to plot_data on the embedded BFile |
httr2jsonliteggplot2gmpcitation("oeis.tools")
A CITATION.cff file is also provided (GitHub's "Cite this repository" button).