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 的每个元素应用一个函数
lapply
或 sapply
函数。
喜欢 lapply(mylist, function(x) mean(x) )
但这就是我的问题。
mylist中的dat3是数据框,它有两个变量,但是lapply
和sapply
函数像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))
我正在为列表而苦苦挣扎。
我有一个具有不同数据结构的列表,如下所示
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 的每个元素应用一个函数lapply
或 sapply
函数。
喜欢 lapply(mylist, function(x) mean(x) )
但这就是我的问题。
mylist中的dat3是数据框,它有两个变量,但是lapply
和sapply
函数像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))