在构建我的第一个R包时,我运行了devtools::check()
,并得到了以下注释:no visible binding for global variable ‘.’
为了解决这个问题,我尝试更加明确,并将.
的任何实例更改为rlang::.data
。它确实解决了devtools
注释时,却使用它提供了错误的输出功能。这是一个示例:
library(magrittr)
library(rlang)
# Creating df with missing values
iris_w_na <- head(iris)
iris_w_na[iris_w_na == 0.2] <- NA
### Replace missing values using .
# This works
iris_w_na %>% replace(is.na(.), -99)
# This doesn't
iris_w_na %>% replace(is.na(rlang::.data), -99)
# This won't work either
na_indexes <- iris_w_na %>% is.na(rlang::.data)
# But this will work
na_indexes <- iris_w_na %>% is.na(.)
iris_w_na %>% replace(na_indexes, -99)
最终,我回过头来使用.
并通过将devtools
放在包装文档中解决了utils::globalVariables(".")
的注意事项。
但是,我仍然想知道.
和.data
之间的区别是什么,以及为什么它们在上述示例中的行为有所不同。