【问题标题】:no visible global function definition for 'one_of'`'one_of' 没有可见的全局函数定义`
【发布时间】:2015-11-11 05:39:48
【问题描述】:

我正在使用 devtools::check() 对我正在编写的包运行 R CMD 检查,并且在检查中遇到以下注意事项:

* checking R code for possible problems ... NOTE prep: no visible global function definition for 'one_of'

我在prep() 中使用one_of 的唯一地方是这一行:

raw_data <- dplyr::select(raw_data, -one_of(drop_vars))

有谁知道我该如何解决这个NOTE

下面是我的DESCRIPTIONNAMESPACE 文件。

任何帮助将不胜感激

这是我的DESCRIPTION 文件的样子:

Package: prepdat
Title: xxx
Version: 0.0.0.9000
Authors@R: person("Ayala S.", "Allon", email = "ayalaallon@gmail.com", role = c("aut", "cre"))
Description:xxx
Depends: R (>= 3.0.3)
License: GPL-3
LazyData: true
Imports: dplyr (>= 0.4.2),
    reshape2 (>= 1.4.1),
    psych(>= 1.5.4)
Suggests: knitr,
    testthat

这是我的NAMESPACE 文件的样子

importFrom(dplyr,"%>%")
importFrom(psych,"harmonic.mean")
exportPattern("^[^\\.]")

【问题讨论】:

  • 您是否在函数上方添加了@import dplyr 标签?我认为这是定义 one_of 函数的地方。如果使用@import语句,则不需要在select前面定义dplyr::
  • @drmariod 感谢您的评论。你能澄清你的意思吗?我使用-one_of 的代码行是一个更大函数中的一行。我应该在我的大函数之前添加一行@import dplyr 吗?谢谢!阿亚拉
  • 也许尝试也导入包lazyeval然后使用select_(iris, interp(~-one_of(x), x = drop_vars))

标签: r global-variables dplyr devtools


【解决方案1】:

one_of 不是从dplyr 导出的函数,所以你不能在你的包中使用它。

this vignette(我建议您阅读)中所述,最好使用select_ 等带下划线的变体对dplyr 进行编程。

试试这个

raw_data <- dplyr::select_(raw_data, "-one_of(drop_vars)")

另外,我会避免在包代码中使用管道运算符。它旨在交互使用,而不是在函数内使用。

【讨论】:

  • 谢谢。我决定不在我的代码中使用dplyr::one_of。这就是我所做的:drop_vars 仍然是一个字符串向量参数(例如,drop_vars = c("prime_type", "font_size") 带有您要删除的列的名称。在函数内部:index_col &lt;- c() # Reset i to 1 i &lt;- 1 while (i &lt;= length(drop_vars)) { index_col[i] &lt;- which(colnames(raw_data) == drop_vars[i]) i &lt;- i + 1} keep_col &lt;- -index_col raw_data &lt;- raw_data[, keep_col]。效果很好。我使用的想法从stackoverflow.com/questions/4427234/…中的答案#2 得到
猜你喜欢
  • 2020-01-21
  • 2020-11-18
  • 2015-09-16
  • 2015-03-17
  • 1970-01-01
  • 2015-08-12
  • 2021-08-24
  • 1970-01-01
相关资源
最近更新 更多