将功能列表应用于单个矩阵,并保留功能名称

时间:2020-02-15 00:03:47

标签: r

我的最终目标是为data.framematrix的列收集摘要统计信息的列表。例如,如果我有一个包含三个变量/列的data.frame,我可能想知道每列的平均值,中位数和标准差。我想做的是拥有一个可以接受任意函数列表的函数。我知道类似的东西会解决问题

summarise = function(x, stats = list(mean, median, sd, length)){
     lapply(stats, function(stat){apply(x, 2, stat)})
}

但是如何用所应用的统计信息/函数的名称标记结果的元素?例如,如果x

x = matrix(1:9, nc = 3)

那我怎么写函数summarise以便我得到

> summarise(x)
$mean
[1] 2 5 8

$median
[1] 2 5 8

$sd
[1] 1 1 1

$length
[1] 3 3 3

返回结果?

1 个答案:

答案 0 :(得分:1)

简单选项是在OP的summarise函数中具有命名输出

summarise <- function(x, stats = list(mean = mean, median = median,
       sd = sd, length = length)){
         lapply(stats, function(stat){apply(x, 2, stat)})
   }

summarise(x)
#$mean
#[1] 2 5 8

#$median
#[1] 2 5 8

#$sd
#[1] 1 1 1

#$length
#[1] 3 3 3

或者,如果我们使用dplyr::lstpurrr::lst,它将自动重命名list元素

summarise <- function(x, stats = dplyr::lst(mean, median,
       sd, length)){
         lapply(stats, function(stat){apply(x, 2, stat)})
   }

summarise(x)
#$mean
#[1] 2 5 8

#$median
#[1] 2 5 8

#$sd
#[1] 1 1 1

#$length
#[1] 3 3 3