Lapply 对于 dlply

Lapply for dlply

我正在尝试对数据框列表应用线性回归,并针对特定值进行过滤。 例如,有一个 Iris 数据框列表,我正在尝试 运行 Sepal.Length ~ Sepal.Width 的回归,每个物种 运行 进行不同的回归。

test <- dlply(iris, "Species", function(x) lm(Sepal.Length ~ Sepal.Width, data = x))

但我想同时对数据帧列表执行此操作,而不是单独执行。所以,假设我有一个包含多个虹膜数据帧的列表:

 iris1 <- iris
 iris2 <- iris
 iris3 <- iris
iris_list <- list(iris1, iris2, iris3) 

所以,运行 到 iris_list 的 dlply 代码,我迷路了。

咕噜声

如果要对数据框列表应用回归,请尝试使用 purrr::map

library(purrr)

map(iris_list, ~ lm(Sepal.Length ~ Sepal.Width, data = .x))

如果你想根据一个因素将数据框拆分成一个列表,你可以先使用 base R 中的 split

imap(split(iris, ~ Species), ~ lm(Sepal.Length ~ Sepal.Width, data = .x))

注意:本例中使用imap来保留列表名称,即本例中Species的级别。

基础 R

如果您只想使用 base R 和 lapply 那么这将有效:

lapply(split(iris, ~ Species), function(x) lm(Sepal.Length ~ Sepal.Width, data = x))

如果您有嵌套列表,则需要嵌套映射:

library(purrr)

map(iris_list, ~ imap(split(.x, ~ Species), ~ lm(Sepal.Length ~ Sepal.Width, data = .x)))

再次在基数 R 中:

lapply(iris_list, function(x) lapply(split(x, ~ Species), function(y) lm(Sepal.Length ~ Sepal.Width, data = y)))

使用lapply,

res = lapply(iris_list, function(x){
  test <- dlply(x, "Species", function(x) lm(Sepal.Length ~ Sepal.Width, data = x))
  return(test)
})