Lookup R function definitions, including compiled code, S3 and S4 methods from packages installed locally, or from GitHub, CRAN or Bioconductor.
# install.packages("devtools")
devtools::install_github("jimhester/lookup")
See Setup for additional setup instructions.
# Lookup a function
lookup::lookup(body)
#> base::body [closure]
#> function (fun = sys.function(sys.parent()))
#> {
#> if (is.character(fun))
#> fun <- get(fun, mode = "function", envir = parent.frame())
#> .Internal(body(fun))
#> }
#> <bytecode: 0x7fa65cada988>
#> <environment: namespace:base>
#> // c source: src/main/builtin.c#L255-L266
#> SEXP attribute_hidden do_body(SEXP call, SEXP op, SEXP args, SEXP rho)
#> {
#> checkArity(op, args);
#> if (TYPEOF(CAR(args)) == CLOSXP)
#> return duplicate(BODY_EXPR(CAR(args)));
#> else {
#> if(!(TYPEOF(CAR(args)) == BUILTINSXP ||
#> TYPEOF(CAR(args)) == SPECIALSXP))
#> warningcall(call, _("argument is not a function"));
#> return R_NilValue;
#> }
#> }
# Can also open a browser at that function's location
lookup_browse()
lookup makes heavy use of the GitHub API, which has a rate limit of 60 requests per hour when unauthenticated. You can create a Personal access token with no scope, which will increase your limit to 5000 requests per hour.
The usethis package has a helper function to help you generate such a token, usethis::browse_github_token()
.
Once you have generated a token, add it to your ~/.Renviron
file or shell
startup file and it will be automatically used for further requests.
GITHUB_PAT=7d8d0436835d1baXYZ1234
gh::gh("/rate_limit")
can be used to query your current usage and limits.
lookup can be used as a complete replacement for function printing by attaching
the package. To make this the default simply add this to your .Rprofile
.
if (interactive()) {
suppressPackageStartupMessages(library(lookup))
}
If you do not want make this the default simply call lookup::lookup()
.
If a base R function is printed that calls compiled code the code is looked up
using the R git mirror. If a CRAN package
has compiled code it is looked up on the CRAN git
mirror. If a package is installed with
devtools::install_github()
or devtools::install()
the remote or local
repository location is searched for the code.
This has been tested to work with .Internal
, .External
, .C
, .Call
and
Rcpp calls.
This package uses a number of heuristics to find function definitions. This means it can fail in some cases, if you find a function that is not looked up properly, please open an issue.
pryr::show_c_source()
which provides a simplified version of looking up internal and primitive calls and additional prior functions to test for S3 method and generic membership.Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.