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)
})
我正在尝试对数据框列表应用线性回归,并针对特定值进行过滤。
例如,有一个 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)
})