dplyr::do() требует именованную функцию?

Следующее работает отлично:

library(dplyr) 
m <- function(df) {
  mod <- lm(Sepal.Length ~ Sepal.Width, data = df)
  pred <- predict(mod,newdata = df["Sepal.Width"])
  data.frame(df,pred)
}
iris %>%
  group_by(Species) %>%
  do(m(.))

Я думал, что это будет работать, если я использовал анонимную функцию, но это не так:

iris %>%
  group_by(Species) %>%
  do(function(df) {
    mod <- lm(Sepal.Length ~ Sepal.Width, data = df)
    pred <- predict(mod,newdata = df["Sepal.Width"])
    data.frame(df,pred)
  })
Error: Results are not data frames at positions: 1, 2, 3

2 ответа

Решение

Вам не нужна анонимная функция:

library(dplyr)
iris %>%
  group_by(Species) %>%
  do({
    mod <- lm(Sepal.Length ~ Sepal.Width, data = .)
    pred <- predict(mod, newdata = .["Sepal.Width"])
    data.frame(., pred)
  })

Вы не можете избавиться от .,

iris %>%
  group_by(Species) %>%
  do((function(df) {
    mod <- lm(Sepal.Length ~ Sepal.Width, data = df)
    pred <- predict(mod,newdata = df["Sepal.Width"])
    data.frame(df,pred)
  })(.))

Это будет работать. . является необходимым. . любовь. Держать .,

Другие вопросы по тегам