Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dplyr::do() requires named function?

Tags:

r

dplyr

The following works fine:

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(.))

I thought that this would work if I used an anonymous function, but it does not:

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
like image 785
AndrewMacDonald Avatar asked Jun 24 '14 00:06

AndrewMacDonald


1 Answers

You don't need an anonymous function:

library(dplyr)
iris %>%
  group_by(Species) %>%
  do({
    mod <- lm(Sepal.Length ~ Sepal.Width, data = .)
    pred <- predict(mod, newdata = .["Sepal.Width"])
    data.frame(., pred)
  })
like image 50
hadley Avatar answered Sep 28 '22 01:09

hadley