R CMD 检查警告:“未定义的全局函数或变量”

R CMD check Warning: "Undefined global functions or variables"

提问人:generic 提问时间:10/8/2022 最后编辑:generic 更新时间:10/8/2022 访问量:372

问:

我希望我能得到关于正确的 R 包装技术的建议。当我运行时,我收到这些消息,指的是我的 zzz。R 文件:R CMD check packagename

File ‘packagename/R/zzz.R’:
  .onLoad calls:
    packageStartupMessage("my message.")
    packageStartupMessage("another message.")
    packageStartupMessage("and another message)

See section ‘Good practice’ in '?.onAttach'.

.onLoad: no visible global function definition for ‘unzip’
.onLoad: no visible global function definition for ‘file.move’
Undefined global functions or variables:
  file.move unzip
Consider adding
  importFrom("utils", "unzip")
to your NAMESPACE file.

我不完全清楚这意味着什么。

根据第一条消息,我没有功能。我只是有一个功能。我的包在没有 的情况下工作正常,所以我不确定这里暗示了什么。See section ‘Good practice’ in '?.onAttach'..onAttach().onLoad().onAttach()

我不确定为什么会显示我,因为我像这样使用 unzip 和 file.move:,..onLoad: no visible global function definition for ‘unzip’.onLoad: no visible global function definition for ‘file.move’utils::unzip()ff::file.move()

如何添加到我的 NAMESPACE 文件中?我没有直接编辑过这个文件,因为当我打开它时,我收到一个警告,不要手动编辑它。importFrom("utils", "unzip")

这就是我的zzz。R 文件如下所示:

.onLoad <- function(libname, pkgname) {

  quiet <- function(x) {
    sink(tempfile())
    on.exit(sink())
    invisible(force(x))
  }

  path <- paste0(.libPaths(), "/packagename/")[1]
  if(file.exists(paste0(path, "data/"))) { invisible()
    } else {
      url <- "urlpath"
      fname <- paste0(path, "data.zip")
      packageStartupMessage("message.")

      tryCatch({
        utils::download.file(url, fname, mode = "wb")

        zip_file <- paste0(path, "data.zip")
        utils::unzip(zip_file, exdir = paste0(path, "uncompressed_data"))

        from <- paste0(path, "uncompressed_data/data/")
        to <- paste0(path, "data/")

        quiet(ff::file.move(from, to))
        quiet(file.remove(paste0(path, "data.zip")))
        quiet(file.remove(paste0(path, "uncompressed_data"))) },

        warning = function(cond) {
          packageStartupMessage("message.")
          packageStartupMessage("message") } )

      }

  }

我的 NAMESPACE 文件只是这样说:

# Generated by roxygen2: do not edit by hand

非常感谢您的输入。

R 命名空间 Roxygen2

评论

1赞 MrFlick 10/8/2022
你的函数到底是什么样子的?您是否使用 roxygen 进行文档记录?或者您的NAMESPACE文件是如何创建的?onLoad
0赞 generic 10/8/2022
谢谢你的提问。我正在使用 roxygen,但我没有 .zzz 的 Rd 文件。R,因为我没有注释 zzz.R。我刚刚编辑了我的问题,以显示我的函数和我的 NAMESPACE 文件。我基本上是用来下载一些数据的。.onLoad.onLoad

答: 暂无答案