dplyr。和_no全局变量的可见绑定'。'_在包检查中注意

时间:2018-02-12 15:45:07

标签: r dplyr pipe magrittr

dplyr中,可以编写例如使用 '。'引用管道中的数据

x <- data.frame(x = 2:4)
y <- data.frame(y = 1:3)

y %>% dplyr::bind_cols(x,.)

但是当在函数中使用它并运行包时,检查它是否产生

  

没有可见的全局变量绑定'。'。

处理注意事项的最佳做法是什么?

2 个答案:

答案 0 :(得分:4)

现在最好的做法是使用quosures。其他SO帖子有一个很好的总结:How to evaluate a constructed string with non-standard evaluation using dplyr?

在实践中,我刚刚将. = NULL包含在我的职能顶部。

修改

正如@MrFlick所指出的,在这种情况下,quosures实际上并没有帮助。您可以使用quosures来定义列名等,这样可以避免关于包函数中非标准评估的注释(我还没有这样做,但它至少在我的待办事项列表中有一个)我的软件包),但您实际上无法使用此策略将值传递给指定的参数或位置 与.

值得指出的是,至少some overhead with using pipes。可能最佳做法是在包函数中根本不使用管道,这解决了使用.的问题。对于使用dplyr命令的其余NSE,您可以使用quosures。

答案 1 :(得分:2)

似乎最佳实践是使用.data而不是.,然后使用.data包中的导入rlang。来自programming with dplyr vignette

  

如果此函数位于软件包中,则使用.data还可防止R CMD检查给出有关未定义的全局变量的注释(前提是您还使用@importFrom rlang .data导入了rlang ::。data)。

不幸的是,这不适用于dplyr::bind_cols的原始问题,但例如适用于dplyr::mutatedplyr::do