我试图将线性回归应用于数据帧列表,并对特定值进行筛选。例如,有一个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) 因此,要将dlply代码运行到iris_list,我就迷路了。
发布于 2021-10-15 17:27:26
使用lapply,
res = lapply(iris_list, function(x){
test <- dlply(x, "Species", function(x) lm(Sepal.Length ~ Sepal.Width, data = x))
return(test)
})发布于 2021-10-15 17:22:37
purrr
如果要在数据帧列表中应用回归,请尝试使用purrr::map:
library(purrr)
map(iris_list, ~ lm(Sepal.Length ~ Sepal.Width, data = .x))如果您想根据一个因子将一个数据帧分割成一个列表,您可以首先使用基数R中的split:
imap(split(iris, ~ Species), ~ lm(Sepal.Length ~ Sepal.Width, data = .x))注意:在本例中,imap用于保留列表名称,在本例中是Species的级别。
碱基R
如果您只想使用基数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)))https://stackoverflow.com/questions/69587835
复制相似问题