Site icon R-bloggers

Which functions in R base call internal code?

[This article was first published on 4D Pie Charts » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

In a recent question on Stack Overflow about speeding up group-by operations, Marek wondered which functions called .Internal code (and consequently were fast). I was surprised to see that there appears to be no built-in way to check whether or not this is the case (though is.primitive is available for primitive functions).

Writing such a function is quite straight forward. We simply examine the contents of the function body, and serach for the string “.Internal” within it.

callsInternalCode <- function(fn) { +++if(!require(stringr)) stop("stringr package required") +++any(str_detect(capture.output(body(fn)), ".Internal")) }

You can retrieve all the function in the base package with this one-liner taken from an example on the Filter help page.

funs <- Filter(is.function, sapply(ls(baseenv()), get, baseenv()))

Now getting the list of functions that call internal code is easy.

names(funs)[sapply(funs, callsInternalCode)] [1] "abbreviate" "agrep" [3] "all.names" "all.vars" [5] "anyDuplicated.default" "aperm" ...


Tagged: internal, r

To leave a comment for the author, please follow the link and comment on their blog: 4D Pie Charts » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.