基于应用函数命名 R 中的列表元素

Cor*_*bjn 2 r sapply

我有一组函数funs <- c(mean, median, min, max, quantile)想要应用于数字向量values。这可以很容易地完成sapply(),但结果是没有一个元素有名称。我希望每个列表元素根据应用的函数命名。我试过:

funs <- c(mean, median, min, max, quantile)
some_vals <- c(rnorm(14))

stats <- sapply(funs, function(fun) {
    result <- fun(some_vals)
    names(result) <- deparse(substitute(fun))
    return(result)
    }
)
Run Code Online (Sandbox Code Playgroud)

但每个列表元素都被命名为 X[[i]]。如何根据应用的函数命名列表元素?

All*_*ron 5

困难在于,一旦将函数对象存储在列表中,它们就不再具有名称,除非您在列表中为该对象指定名称。

我会使用字符串作为函数名称,然后match.funsapply. 这很容易做到,而且您可以免费获得名称。

funs <- c("mean", "median", "min", "max", "quantile")
some_vals <- c(rnorm(14))

sapply(funs, function(fun) match.fun(fun)(some_vals))
#> $mean
#> [1] -0.06134755
#> 
#> $median
#> [1] -0.3473996
#> 
#> $min
#> [1] -2.140686
#> 
#> $max
#> [1] 1.940046
#> 
#> $quantile
#>         0%        25%        50%        75%       100% 
#> -2.1406864 -0.7488198 -0.3473996  0.7707063  1.9400459
Run Code Online (Sandbox Code Playgroud)

另一种方法是命名您的列表:

funs <- c(mean = mean, median = median, min = min, max = max, 
          quantile = quantile)

sapply(funs, function(fun) fun(some_vals))
#> $mean
#> [1] -0.06134755
#> 
#> $median
#> [1] -0.3473996
#> 
#> $min
#> [1] -2.140686
#> 
#> $max
#> [1] 1.940046
#> 
#> $quantile
#>         0%        25%        50%        75%       100% 
#> -2.1406864 -0.7488198 -0.3473996  0.7707063  1.9400459
Run Code Online (Sandbox Code Playgroud)

创建于 2023-08-21,使用reprex v2.0.2