【问题标题】:Apply a list of functions to a single matrix and retain the function names将函数列表应用于单个矩阵并保留函数名称
【发布时间】:2020-05-30 18:12:42
【问题描述】:

我的最终目标是收集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

结果返回?

【问题讨论】:

    标签: r


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2023-04-06
      • 2014-09-12
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      相关资源
      最近更新 更多