Это из-за времени отмены цитирования. Вложение аккуратных eval-функций может быть немного сложнее, потому что это самая первая аккуратная eval-функция, которая обрабатывает операторы без кавычек.
Давайте перепишем это:
mutate(data = map2(data, name, ~ mutate(.x, !!.y := "anything")))
до
mutate(data = map2(data, name, function(x, y) mutate(x, !!y := "anything")))
Привязки x
и y
создаются только тогда, когда функция вызывается map2()
. Поэтому, когда запускается первый mutate()
, эти привязки еще не существуют, и вы получаете ошибку «объект не найден». С формулой это немного сложнее увидеть, но формула расширяется до функции, принимающей .x
и .y
аргументов, поэтому у нас та же проблема.
В целом, лучше избегать сложной вложенной логики в вашем коде, потому что это затрудняет чтение. С Tidy Eval это еще сложнее, поэтому лучше делать все по шагам. В качестве дополнительного бонуса, выполнение действий поэтапно требует создания промежуточных переменных, которые, при правильном названии, помогают понять, что делает функция.