wit*_*tek 11 r pipe dplyr magrittr
在dplyr一个人可以编写代码,例如使用'.' 引用管道中的数据
x <- data.frame(x = 2:4)
y <- data.frame(y = 1:3)
y %>% dplyr::bind_cols(x,.)
但是当在一个函数中使用它并运行包时,检查它会产生
全局变量'.'没有可见的绑定.
处理NOTE的最佳做法是什么?
sha*_*dow 10
看来,最好的做法是使用.data替代.,然后使用进口.data从rlang包。从带有dplyr小插图的编程中:
如果此函数在包中,使用 .data 还可以防止 R CMD 检查给出有关未定义全局变量的注释(前提是您还使用 @importFrom rlang .data 导入了 rlang::.data)。
不幸的是,这不适用于 的原始问题dplyr::bind_cols,但它适用于例如dplyr::mutate和dplyr::do。
现在的最佳实践可能是使用 quosures。另一个 SO 帖子有一个很好的总结:如何使用 dplyr 使用非标准评估来评估构造的字符串?
在实践中,我刚刚包含. = NULL在我的函数的顶部。
编辑
正如@MrFlick 指出的那样,在这种情况下,quosures 实际上并没有帮助。您可以可行地使用 quosures 来定义列名称等,这样您就可以避免在包函数中进行非标准评估的注释(我还没有这样做,但它在我的待办事项列表中至少有一个我的包),但您实际上不能使用此策略将值传送到指定的参数或位置.。
值得指出的是,使用管道至少有一些开销。最佳实践可能是在包函数中根本不实际使用管道,这解决了使用.. 对于带有dplyr命令的 NSE 的其余部分,您可以使用 quosures。