These pronouns allow you to be explicit about where to find objects when programming with data masked functions.
m <- 10 mtcars %>% mutate(disp = .data$disp * .env$m)
.data retrieves data-variables from the data frame.
.env retrieves env-variables from the environment.
Because the lookup is explicit, there is no ambiguity between both kinds of variables. Compare:
disp <- 10 mtcars %>% mutate(disp = .data$disp * .env$disp) mtcars %>% mutate(disp = disp * disp)
.data is only a pronoun, it is not a real data
frame. This means that you can't take its names or map a function
over the contents of
.env is not an actual R
environment. For instance, it doesn't have a parent and the
subsetting operators behave differently.
.data object exported from rlang is useful to import
in your package namespace to avoid a
R CMD check note when
referring to objects from the data mask. R does not have any way of
knowing about the presence or absence of
.data in a particular
scope so you need to import it explicitly or equivalently declare
rlang::.data is a "fake" pronoun. Do not refer to
rlang::.data with the
rlang:: qualifier in data masking
code. Use the unqualified
.data symbol that is automatically put
in scope by data-masking functions.