В dplyr::do()
есть ли способ доступа к переменным в контексте .data
как и для других функций dplyr? Например, скажем, у меня есть кадр данных:dplyr do() без местоимения точки?
> dd <- data.frame(a=1:5)
mutate()
, а также другие функции, работает так, что выражения вычисляются в контексте фрейма данных:
> mutate(dd,a2=a*2)
a a2
1 1 2
2 2 4
3 3 6
4 4 8
5 5 10
Но не do
:
> do(dd,data.frame(a2=a[1:2]*2))
Error in eval(expr, envir, enclos) : object 'a' not found
Я могу достичь своей цели с помощью with()
и точечного местоимения:
> do(dd,with(.,data.frame(a2=a[1:2]*2)))
a2
1 2
2 4
Я также не знаю, почему это не работает:
> do(dd,function(X) data.frame(a2=X$a[1:2]*2))
Error: Result must be a data frame
Вопросы:
- Есть ли логика, почему такое поведение (сфера) отличается от
mutate
,select
и т. д. - Есть ли элегантное решение или у меня есть , чтобы продолжать использовать
with()
, если я не хочу продолжать использовать.$variablename
в выражении? - Почему работа анонимного не работает? Кажется, что это работает here, но не знаю, почему мой случай отличается.