没有可见的全局函数定义'one_of'。

4

我正在使用devtools::check()运行R CMD检查自己编写的软件包,然后在检查中遇到以下注释:

* 检查可能存在的问题 ... 注释 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
@drmariod 谢谢您的评论。您能否请澄清一下您的意思?我使用“-one_of”的代码行是大函数内的一行代码。我应该在我的大函数之前添加一行“@import dplyr”的代码吗?谢谢!Ayala - ayalaall
也许尝试导入“lazyeval”包,然后使用“select_(iris, interp(~-one_of(x), x = drop_vars))”。 - talat
1个回答

3
one_of 不是从 dplyr 中导出的函数,因此您不能在您的软件包中使用它。如本文档所述(建议您阅读),最好使用带下划线的变体,例如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 <- c() # 重置i为1 i <- 1 while (i <= length(drop_vars)) { index_col[i] <- which(colnames(raw_data) == drop_vars[i]) i <- i + 1} keep_col <- -index_col raw_data <- raw_data[, keep_col]。它运行得很好。我从https://dev59.com/e2855IYBdhLWcg3wSiQ7的答案#2中得到了使用which的想法。 - ayalaall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接