【问题标题】:Are explicit roxygen import from base package needed?是否需要从基本包中显式导入 roxygen?
【发布时间】:2016-11-30 10:57:02
【问题描述】:

具体例子:

在我的包中,我的一个函数使用grep 形成base 包。

我应该明确导入grep 还是只会引入无用的依赖项?我的意思是,每个人都已经有了base 包,对吧?

为了说明:

#' Group_by with regex based column selection
#' Similar to `group_by` but grouping columns are selected with a regex.
#' @importFrom dplyr group_by
#' @importFrom base grep
#' @export
group_at <- function(df, pattern)
  group_by_(df, .dots=grep(names(df), pattern=pattern, value=T))

【问题讨论】:

  • 如果您需要导入grep,则需要导入所有内容,甚至包括function(,它们也存在于base 中。这很快就会变得乏味。

标签: r r-package


【解决方案1】:

来自 Writing R Extensions 手册 sec.1.1.3:

在没有版本规范的情况下声明对 R 的依赖,也没有对包库的依赖:这是一个 R 包,并且包库始终可用。

【讨论】:

  • 谢谢!我实际上发现 roxygen 会抛出一条错误消息,指出不应导入 base。然后由于包含 base 的非法 NAMESPACE (asNamespace : operation not allowed on base namespace),包无法加载。
【解决方案2】:

通过从 NAMESPACE 中删除与包 base 关联的以下术语

  import(base)  , 
 importFrom(base,system.file)

并在DESCRIPTION文件中,删除以下术语。

 Imports: base  

然后下面的错误就消失了:

 preparing package for lazy loading
Error in asNamespace(ns, base.OK = FALSE) : 
  operation not allowed on base namespace
ERROR: lazy loading failed for package 'aa'

【讨论】:

  • 这里发生了一些奇怪的事情。我正在编写一个需要month.abb 的包。 RMD 检查然后说:“month.abb”没有可见的全局函数定义 未定义的全局函数或变量:month.abb 考虑将 importFrom("base", "month.abb") 添加到您的 NAMESPACE 文件中。
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多