lapply 计算列表中数据帧均值的函数

lapply function to compute means of data frames inside a list

我正在尝试使用 lapply 函数计算列表中数据帧的均值。

df_list <- list(cars, mtcars)
sapply(df_list, mean)

上面的代码似乎不起作用。但是,当我将其更改为:

 df_list <- c(cars, mtcars)
 sapply(df_list, mean)

输出具有两个数据帧的所有变量的均值。

有没有一种方法可以使用第一种方法计算均值。

使用 purrr 库来实现这个...更简单:

library(purrr) 
map(df_list, ~map_if(., is.numeric, mean))

如果你想返回 df 那么:

map_df(df_list, ~map_if(., is.numeric, mean)) 

答案来自这里: 信用应该去@Axeman

在 base R 中,您可以使用 rapply 来计算 data.frames 列表中包含的变量的均值。

# data
df_list <- list(cars, mtcars)

最简单的输出是 运行 rapply 带有两个参数,函数和 data.frames 的列表。函数 if(is.numeric(x)) mean(x) 检查变量是否为数字,如果是,则 return 是平均值。

# returns a vector of means
rapply(df_list, function(x) if(is.numeric(x)) mean(x))

此输出破坏了变量与其 data.frames 之间的关系。如果需要,我们可以 return 保留原始对象的结构中的值,长度为 2 的嵌套列表以及长度为 2 和 11 的内部列表。

rapply(df_list, function(x) if(is.numeric(x)) mean(x), how="list")

生成的结构可能比预期的更复杂。根据我的口味,

lapply(rapply(df_list, function(x) if(is.numeric(x)) mean(x), how="list"), unlist)
[[1]]
speed  dist 
15.40 42.98 

[[2]]
       mpg        cyl       disp         hp       drat         wt       qsec 
 20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750 
        vs         am       gear       carb 
  0.437500   0.406250   3.687500   2.812500

得到一个很好的平衡,一个长度为 2 的列表,每个列表包含均值的命名向量。