全局变量‘.’没有可见的绑定

问题描述 投票:0回答:2

我目前正在使用

R
共同开发一个
devtools
包。我们使用 tidyverse
%>%
以及相关的
purrr
dplyr
包在我们的 功能。

我们的功能之一如下(为清楚起见进行了编辑):

#' Print `cust_modl` object
#'
#' @param x A `cust_modl` object.
#' @param ... Additional arguments passed to `print.cust_modl()` to print the
#'   object.
#'
#' @method print cust_modl
#' @export
print.cust_modl <- function(x, ...) {

req_var_nms <- x$var %>%
purrr::compact(.x = .) %>%
names(x = .)

comp_var_ind_filt <- req_var_nms %>%
purrr::map(.x = ., .f = ~ purrr::pluck(x$var, .x))

}

目前在我们的 Github Actions

NOTE
中给出了
devtools::check()
,如下:

print.cust_modl: no visible binding for global variable ‘.’

我了解到此错误是由于基于

这篇有用的帖子
rlang相关问题造成的。因此,通常我们按照建议使用
@importFrom rlang .data
并确保 在
dplyr
中,我们在引用列时正确携带
.data$
语法。

但是,这个

NOTE
似乎是由
purrr
调用给出的,但它不是 明确如何仅针对
rlang
纠正
.
导入(而不是通常更明确的
.data
致电
dplyr
)。

任何人都可以解释一下如何正确调整

.
的 R 包代码吗? tidyverse 软件包如
purrr
?我知道我们可以在本地设置
. <- NULL
,但是有没有更严格的方法来使用
rlang
进行设置?了解此处推荐的指南将使我们的软件包能够按照社区标准进行开发。

免责声明:这是从这里交叉发布的,因为已经好几天没有收到回复了。

r dplyr rlang tidyeval
2个回答
7
投票

此警报来自

codetools
包。除了其他解决方案之外,还有一个选项是在 R CMD 检查中完全不使用
codetools
。在您的
~/.Renviron
文件中(要从 R 控制台快速打开,请使用
usethis::edit_r_environ()
),添加一行,如下所示:

_R_CHECK_USE_CODETOOLS_= FALSE

如果您进行大量 NSE,这会引发许多错误警报,建议您这样做。


0
投票

通常这只是一个问题:

  1. 为全局变量提供 Roxygen 文档,并且
  2. 跑步
    devtools::document()

例如,如果我在

preferred_font
常量上收到此警告,我可以在其上方添加以下行,告诉 Roxygen 将其记录为“内部”常量:

#' Preferred font for data viz
#' @keywords internal
preferred_font <- "Arial"

然后我就跑

devtools::document()

下次我运行

devtools::check()
lintr::lint_package()
时,它不会发出警告。

© www.soinside.com 2019 - 2024. All rights reserved.