dplyr :: do()需要命名函数吗?

And*_*ald 17 r dplyr

以下工作正常:

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(.))
Run Code Online (Sandbox Code Playgroud)

我认为如果我使用匿名函数,这将有效,但它没有:

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
Run Code Online (Sandbox Code Playgroud)

had*_*ley 20

您不需要匿名函数:

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


sta*_*kam 14

你无法摆脱..

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)
  })(.))
Run Code Online (Sandbox Code Playgroud)

那可行.这.是必要的.的.是爱.保持..

  • 你能解释一下这里发生了什么吗?为什么函数在()?为什么需要点?为什么()中的点? (3认同)