r - 将 lm 输出列表转换为数据帧

标签 r list dataframe output lm

我需要将列表转换为数据框。我的列表包含每天运行的 lm 函数的输出,是一个包含 521 个元素的大列表。

我尝试了以下代码:

df <- bind_rows(modelsT, .id = "column_label")

但我收到此错误:

Error: Argument 1 must be a data frame or a named atomic vector, not a lm

有办法解决这个错误吗?或者另一种选择如何将列表转换为数据框?

最佳答案

这取决于您的需要:

model <- lm(mpg ~ disp, data = mtcars)
coef(model)
# (Intercept)        disp 
# 29.59985476 -0.04121512 

library(dplyr)
bind_rows(coef(model), coef(model))
# # A tibble: 2 x 2
#   `(Intercept)`    disp
#           <dbl>   <dbl>
# 1          29.6 -0.0412
# 2          29.6 -0.0412

正如 @jay.sf 刚刚建议的那样

coef(summary(model))
#                Estimate  Std. Error   t value     Pr(>|t|)
# (Intercept) 29.59985476 1.229719515 24.070411 3.576586e-21
# disp        -0.04121512 0.004711833 -8.747152 9.380327e-10
bind_rows(as.data.frame(coef(summary(model))), as.data.frame(coef(summary(model))))
#      Estimate  Std. Error   t value     Pr(>|t|)
# 1 29.59985476 1.229719515 24.070411 3.576586e-21
# 2 -0.04121512 0.004711833 -8.747152 9.380327e-10
# 3 29.59985476 1.229719515 24.070411 3.576586e-21
# 4 -0.04121512 0.004711833 -8.747152 9.380327e-10

一般来说,如果您想从结构中获取类似 data.frame 的内容,请查看其结构。这可能会令人困惑,但是

str(model)
# List of 12
#  $ coefficients : Named num [1:2] 29.5999 -0.0412
#   ..- attr(*, "names")= chr [1:2] "(Intercept)" "disp"
#  $ residuals    : Named num [1:32] -2.01 -2.01 -2.35 2.43 3.94 ...
#   ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#  $ effects      : Named num [1:32] -113.65 -28.44 -1.79 2.65 3.92 ...
#   ..- attr(*, "names")= chr [1:32] "(Intercept)" "disp" "" "" ...
#  $ rank         : int 2
#  $ fitted.values: Named num [1:32] 23 23 25.1 19 14.8 ...
#   ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#  $ assign       : int [1:2] 0 1
#  $ qr           :List of 5
#   ..$ qr   : num [1:32, 1:2] -5.657 0.177 0.177 0.177 0.177 ...
#   .. ..- attr(*, "dimnames")=List of 2
#   .. .. ..$ : chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#   .. .. ..$ : chr [1:2] "(Intercept)" "disp"
#   .. ..- attr(*, "assign")= int [1:2] 0 1
#   ..$ qraux: num [1:2] 1.18 1.09
#   ..$ pivot: int [1:2] 1 2
#   ..$ tol  : num 1e-07
#   ..$ rank : int 2
#   ..- attr(*, "class")= chr "qr"
#  $ df.residual  : int 30
#  $ xlevels      : Named list()
#  $ call         : language lm(formula = mpg ~ disp, data = mtcars)
#  $ terms        :Classes 'terms', 'formula'  language mpg ~ disp
#   .. ..- attr(*, "variables")= language list(mpg, disp)
#   .. ..- attr(*, "factors")= int [1:2, 1] 0 1
#   .. .. ..- attr(*, "dimnames")=List of 2
#   .. .. .. ..$ : chr [1:2] "mpg" "disp"
#   .. .. .. ..$ : chr "disp"
#   .. ..- attr(*, "term.labels")= chr "disp"
#   .. ..- attr(*, "order")= int 1
#   .. ..- attr(*, "intercept")= int 1
#   .. ..- attr(*, "response")= int 1
#   .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
#   .. ..- attr(*, "predvars")= language list(mpg, disp)
#   .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
#   .. .. ..- attr(*, "names")= chr [1:2] "mpg" "disp"
#  $ model        :'data.frame':    32 obs. of  2 variables:
#   ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#   ..$ disp: num [1:32] 160 160 108 258 360 ...
#   ..- attr(*, "terms")=Classes 'terms', 'formula'  language mpg ~ disp
#   .. .. ..- attr(*, "variables")= language list(mpg, disp)
#   .. .. ..- attr(*, "factors")= int [1:2, 1] 0 1
#   .. .. .. ..- attr(*, "dimnames")=List of 2
#   .. .. .. .. ..$ : chr [1:2] "mpg" "disp"
#   .. .. .. .. ..$ : chr "disp"
#   .. .. ..- attr(*, "term.labels")= chr "disp"
#   .. .. ..- attr(*, "order")= int 1
#   .. .. ..- attr(*, "intercept")= int 1
#   .. .. ..- attr(*, "response")= int 1
#   .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
#   .. .. ..- attr(*, "predvars")= language list(mpg, disp)
#   .. .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
#   .. .. .. ..- attr(*, "names")= chr [1:2] "mpg" "disp"
#  - attr(*, "class")= chr "lm"

str(summary(model))
# List of 11
#  $ call         : language lm(formula = mpg ~ disp, data = mtcars)
#  $ terms        :Classes 'terms', 'formula'  language mpg ~ disp
#   .. ..- attr(*, "variables")= language list(mpg, disp)
#   .. ..- attr(*, "factors")= int [1:2, 1] 0 1
#   .. .. ..- attr(*, "dimnames")=List of 2
#   .. .. .. ..$ : chr [1:2] "mpg" "disp"
#   .. .. .. ..$ : chr "disp"
#   .. ..- attr(*, "term.labels")= chr "disp"
#   .. ..- attr(*, "order")= int 1
#   .. ..- attr(*, "intercept")= int 1
#   .. ..- attr(*, "response")= int 1
#   .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
#   .. ..- attr(*, "predvars")= language list(mpg, disp)
#   .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
#   .. .. ..- attr(*, "names")= chr [1:2] "mpg" "disp"
#  $ residuals    : Named num [1:32] -2.01 -2.01 -2.35 2.43 3.94 ...
#   ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
#  $ coefficients : num [1:2, 1:4] 29.59985 -0.04122 1.22972 0.00471 24.07041 ...
#   ..- attr(*, "dimnames")=List of 2
#   .. ..$ : chr [1:2] "(Intercept)" "disp"
#   .. ..$ : chr [1:4] "Estimate" "Std. Error" "t value" "Pr(>|t|)"
#  $ aliased      : Named logi [1:2] FALSE FALSE
#   ..- attr(*, "names")= chr [1:2] "(Intercept)" "disp"
#  $ sigma        : num 3.25
#  $ df           : int [1:3] 2 30 2
#  $ r.squared    : num 0.718
#  $ adj.r.squared: num 0.709
#  $ fstatistic   : Named num [1:3] 76.5 1 30
#   ..- attr(*, "names")= chr [1:3] "value" "numdf" "dendf"
#  $ cov.unscaled : num [1:2, 1:2] 1.43e-01 -4.85e-04 -4.85e-04 2.10e-06
#   ..- attr(*, "dimnames")=List of 2
#   .. ..$ : chr [1:2] "(Intercept)" "disp"
#   .. ..$ : chr [1:2] "(Intercept)" "disp"
#  - attr(*, "class")= chr "summary.lm"

向您展示各个事物的外观,并且任何类似于矩阵的东西都可以使用 as.data.frame() 轻松转换(也可以使用 stringsAsFactors=FALSE)。

关于r - 将 lm 输出列表转换为数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56609192/

相关文章:

R:查找满足条件的行

r - 排除节点 RVest

python - 为什么追加会用新元素覆盖列表中的所有内容?

dataframe - PySpark 列到其值的 RDD

r - 将 data.frame 中的所有列乘以第一个

r - 自定义环境中的范围(功能)

bash - tee 命令创建空文件

java - For 循环迭代器类型与我尝试访问的类型不同

python - 添加缺失的列

c++ - 当算法放置在循环内部时,它会产生不同的结果,C++