Search code examples
rdevtoolsr-package

How to fix `no visible global function definition` when creating a new R-package


I try to build an R-package that uses the library tidyverse.

The description file looks like the following:

Package: myFirstPackage
Title: A initial package
Version: 0.0.1.0
Authors@R: 
    person(given = "Test",
           family = "Test",
           role = c("aut", "cre"),
           email = "[email protected]",
           comment = c(ORCID = "YOUR-ORCID-ID"))
Description: a description.
Imports: tidyverse
License: GPL-2
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.1

So I added tidyverse to the Imports section.

My R-Code looks like the following:

myfunction<-function(){

  x<-tibble(
    id = c(1, 2, 3, 4),
    name = c("Louisa", "Jonathan", "Luigi", "Rachel"),
    female = c(TRUE, FALSE, FALSE, TRUE)
  )
  x %>% pull(id)
}

#' MyDemoFunction
#'
#'
#' @import tidyverse
#' @export

say_hello<-function(){
  cat("here1")
  myfunction()
}

Also here, I have the import.

I am working with R-Studio and as soon as I pressed Check, I get:

> checking R code for possible problems ... NOTE
  myfunction: no visible global function definition for 'tibble'
  myfunction: no visible global function definition for '%>%'
  myfunction: no visible global function definition for 'pull'
  myfunction: no visible binding for global variable 'id'
  Undefined global functions or variables:
    %>% id pull tibble

You find the repo of the project here.

In that question the problem was solved by importing function by function but I want to have complete import of the package: I simply want to use all function of tidyverse without defining each of them explicitly. In the question here it was mentioned that the import has to be in the description which I have already!


Solution

  • My solution for a clean check. You need R 4.1.0 to use |> operator.

    plainSrc.R:

    ####This File represents a package used for Index Management
    
    ### Overall approach of this package ###
    # In order to avoid a static hard coding of the index members
    # we use a web-based approach based on finanzen.de from there we
    # get the index members for which we offer the data.
    
    #' @import dplyr
    #'
    myfunction<-function(){
    
      x <- dplyr::tibble(
        id = c(1, 2, 3, 4),
        name = c("Louisa", "Jonathan", "Luigi", "Rachel"),
        female = c(TRUE, FALSE, FALSE, TRUE)
      )
      x |> dplyr::pull(one_of("id"))
    }
    
    #' MyDemoFunction
    #'
    #'
    #' @export
    #'
    say_hello<-function(){
      cat("here1")
      myfunction()
    }
    

    and change Imports in DESCRIPTION from tidyverse to dplyr.