I'm wondering how functions like tidyselect::everything()
do to error when executed outside the desired scope/environment. If I understand correctly, everything()
will check whether or not data exist in a predefined environment (vars_env
here which is defined in the package environment). If the data exist, the function proceeds, otherwise it throws an error. What I don't get though, is when, where and how everything()
is evaluated.
Considering the following code:
mutate(a_tibble, across(everything(), as.character))
I'd normally expect everything()
to be evalutated first, across()
second and mutate()
last. Since the data doesn't exist in everything()
's environment, I'd then expect the line above to fail everytime.
I couldn't find in the source code where the data is passed to vars_env
. I'd assume it happens within mutate()
, which then would mean the way evaluation occurs in the code above is opposite of what I thought.
Any hints to help me understand how all this works?