Я бы рекомендовал использовать пакет метлы немного по-другому для подобных приложений.Вот как это делается:
require(broom)
# simulate data
make_df <- function(){data.frame(ColumnOne = rnorm(5),
ColumnTwo=rnorm(5),
ColumnThree=rnorm(5)
)
}
my_list <- list(df1 = make_df(),
df2 = make_df(),
df3=make_df()
)
# bind the rows of the dataframe together and group by origin
my_list %>%
bind_rows(.id='df') %>%
group_by(df) %>%
do(tidy(lm(data=.,
formula=ColumnOne ~ ColumnTwo + ColumnThree
)
)
)
Результатом полученных мной случайных игрушечных данных является кадр данных, который выглядит следующим образом:
A tibble: 9 x 6
# Groups: df [3]
df term estimate std.error statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 df1 (Intercept) -1.23 0.840 -1.47 0.280
2 df1 ColumnTwo 0.944 0.573 1.65 0.241
3 df1 ColumnThree -0.532 0.486 -1.09 0.388
4 df2 (Intercept) 0.942 0.718 1.31 0.320
5 df2 ColumnTwo 0.900 1.02 0.885 0.470
6 df2 ColumnThree -0.0596 0.443 -0.135 0.905
7 df3 (Intercept) 0.0453 0.0742 0.610 0.604
8 df3 ColumnTwo 0.554 0.0509 10.9 0.00833
9 df3 ColumnThree -0.229 0.114 -2.00 0.183
Стратегия проектирования Брума состоит в том, чтобы максимально использовать кадры данных.Если вы начинаете со списка фреймов данных, имеющих одинаковые столбцы, проще объединить их в один фрейм данных, и после этого метла позволяет работать с ним напрямую, вместо того, чтобы выполнять функциональное программирование в списках.