Returns 函数结果来自具有不同数据结构的列表。 (使用 lapply 或应用函数)

Returns function results from list with different data structure. (using lapply or sapply function)

我正在为列表而苦苦挣扎。

我有一个具有不同数据结构的列表,如下所示

mylist<-list(dat1=c(rep(5:9, times=2)), dat2=seq(50,120,by=6), dat3=data.frame(a=c(1:4),b=c(-1:2)))

我想做的是使用

对 mylist 的每个元素应用一个函数

lapplysapply 函数。 喜欢 lapply(mylist, function(x) mean(x) )

但这就是我的问题。 mylist中的dat3是数据框,它有两个变量,但是lapplysapply函数像returns一样只有一个最大值和平均值。

输出我想要得到的是

 $dat1             
    max    mean 
     9       7
 $dat2
    max   mean
     116    83
 $dat3
      a              b
    max mean     max mean 
     4   2.5      2   0.5

您可以使用递归 lapply (rapply)

rapply(mylist, function(x) c(max = max(x), mean = mean(x)), how = "list")

#$dat1
# max mean 
#   9    7 

#$dat2
# max mean 
# 116   83 

#$dat3
#$dat3$a
# max mean 
# 4.0  2.5 

#$dat3$b
# max mean 
# 2.0  0.5 

也许是这样的?

lapply(mylist,function(x){
  lapply(data.frame(x),function(y){
    data.frame(max=max(y),mean=mean(y))
  })
})

$dat1
$dat1$x
  max mean
1   9    7


$dat2
$dat2$x
  max mean
1 116   83


$dat3
$dat3$a
  max mean
1   4  2.5

$dat3$b
  max mean
1   2  0.5

另一种选择

library(purrr)
library(psych)
map(.x = mylist, .f = ~psych::describe(.x))