创建新的 R 包时如何修复“无可见的全局函数定义”

use*_*222 5 r devtools r-package

我尝试构建一个使用该库的 R 包tidyverse

描述文件如下所示:

Package: myFirstPackage
Title: A initial package
Version: 0.0.1.0
Authors@R: 
    person(given = "Test",
           family = "Test",
           role = c("aut", "cre"),
           email = "first.last@example.com",
           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
Run Code Online (Sandbox Code Playgroud)

所以我添加tidyverse到该Imports部分。

我的 R 代码如下所示:

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()
}
Run Code Online (Sandbox Code Playgroud)

我也在这里进口。

我正在使用 R-Studio,一旦按下“检查”,我就会得到:

> 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
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到该项目的存储库。

这个问题中,问题是通过逐个函数导入来解决的,但我想完全导入包:我只想使用 tidyverse 的所有函数,而不需要显式定义每个函数。在这里的问题中提到导入必须在我已经有的描述中!

pol*_*kas 2

我的清洁检查解决方案。您需要 R 4.1.0 才能使用 |> 运算符。

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()
}
Run Code Online (Sandbox Code Playgroud)

并将描述中的导入从 tidyverse 更改为 dplyr。

  • TL;DR tidyverse 是一个简单的包装器,可以一次创建几个库。这很难理解。`tidyverse` 不适合在其他包中使用。它是一个包,提供了一种简单的方法来一次库多个包,检查 onAttach 函数(在库(tidyverse)时调用) - https://github.com/tidyverse/tidyverse/blob/master/R/zzz.R 。tidyverse 中的 :: 无法访问 dplyr 等函数。顺便提一句。请注意不要在包内的 .R 文件中使用库。有时我们使用 if (!require("package")) stop("you need x to continue")`。 (4认同)