微微一變例爲DO():dplyr,做(),提取從模型參數,而不從R幫助丟失分組變量
by_cyl <- group_by(mtcars, cyl)
models <- by_cyl %>% do(mod = lm(mpg ~ disp, data = .))
coefficients<-models %>% do(data.frame(coef = coef(.$mod)[[1]]))
在數據幀係數,存在的第一個係數線性模型爲每個cyl組。我的問題是如何生成一個數據幀,該數據幀不僅包含具有係數的列,還包含具有分組變量的列。
=====編輯:我延長例子,試圖讓更多的明確我的問題
讓我們假設我要提取的模型和一些預測的係數。我可以這樣做:
by_cyl <- group_by(mtcars, cyl)
getpars <- function(df){
fit <- lm(mpg ~ disp, data = df)
data.frame(intercept=coef(fit)[1],slope=coef(fit)[2])
}
getprediction <- function(df){
fit <- lm(mpg ~ disp, data = df)
x <- df$disp
y <- predict(fit, data.frame(disp= x), type = "response")
data.frame(x,y)
}
pars <- by_cyl %>% do(getpars(.))
prediction <- by_cyl %>% do(getprediction(.))
問題是代碼是多餘的,因爲我適合模型兩次。我的想法是建立一個返回的所有信息列表的功能:
getAll <- function(df){
results<-list()
fit <- lm(mpg ~ disp, data = df)
x <- df$disp
y <- predict(fit, data.frame(disp= x), type = "response")
results$pars <- data.frame(intercept=coef(fit)[1],slope=coef(fit)[2])
results$prediction <- data.frame(x,y)
results
}
的問題是,我不知道如何使用做()的函數GETALL獲得例如只是一個數據幀參數(如dataframe pars)。
不知道這會有所幫助。你可以使用'summarise'而不是第二個'do'。總結(模型,coef = coef(summary(mod))[[1]],group = cyl) – akrun
這是一個錯誤,我會盡快解決它。 – hadley
@hadley這個問題解決了嗎?你能指出github問題嗎? –