Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating an RPackage - UseMethod can't find function

Tags:

r

I'm trying on my first attempt on creating an R package. I have some functions that follows below.

#' @export
overview  <- function(x, ...) {
  UseMethod("overview")
} 

overview.query <- function(return.query, ...) {

Now when I use the devtools::load_all() (which loads all functions) everything works, and overview.query is executed when I pass an object of class query.

But rebuilding, and the UseMethod can't find the overview.query function anymore (all functions are thus not loaded), what have I done wrong?

Error message: no applicable method for 'overview' applied to an object of class "c('query', 'data.frame')"

I thought that only functions that are to be exposed to the user are to be @export'ed, and all other functions would still be visible internally to the other package functions.

like image 751
uncool Avatar asked Aug 13 '15 12:08

uncool


1 Answers

When you create a generic function to apply to an S3 object, you need to export both the UseMethod statement and the function itself, as in:

#' @export
overview  <- function(x, ...) {
  UseMethod("overview")
} 
#' @export  
overview.query <- function(return.query, ...) {

which ought to eliminate the error as that method is now available to the user.

This is applicable to roxygen2 versions 3+ (currently on 5). See this answer for more info:

How to properly document S3 methods

like image 80
C8H10N4O2 Avatar answered Oct 16 '22 19:10

C8H10N4O2