在dplyr
中,可以编写例如使用 '。'引用管道中的数据
x <- data.frame(x = 2:4)
y <- data.frame(y = 1:3)
y %>% dplyr::bind_cols(x,.)
但是当在函数中使用它并运行包时,检查它是否产生
没有可见的全局变量绑定'。'。
处理注意事项的最佳做法是什么?
答案 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::mutate
和dplyr::do
。