如何在 sapply 函数中将列名称分配给矩阵?

Ste*_*hen 0 r apply sapply

我有以下过于简单的示例来演示我的问题。如何将列名称分配给通过 生成的单列矩阵sapply?我知道这适用于for循环,所以想知道我是否在这里遗漏了一些东西。感谢任何建议。

> names <- c("apple", "bear", "cat", "dog")
> x <- sapply(1:4, FUN=function(y){
     mat <- matrix(rnorm(10, mean=0, sd=2))
     colnames(mat) <- names[y]
     print(colnames(mat))
     return(mat)
 })
> x
          [,1]     [,2]    [,3]    [,4]
 [1,]  0.50453 -0.15463  2.3660 -0.1451
 [2,] -0.18460  2.01499 -1.4656  0.5702
 [3,]  0.41206 -0.94563 -0.5911  0.6568
 [4,] -0.01510  1.88728  2.2698  0.2722
 [5,] -0.67850 -0.48196  0.7322 -0.1656
 [6,]  3.88306  0.25590 -0.9625 -0.5595
 [7,]  0.09948 -0.48730  2.5696 -1.7280
 [8,]  0.38895 -0.07124 -2.0728  2.4206
 [9,] -1.23075  2.09420  1.3673  0.1967
[10,]  0.14671  0.08022 -2.3208  2.5696
Run Code Online (Sandbox Code Playgroud)

我希望最终的矩阵如下所示:

> x
         apple     bear     cat     dog
 [1,]  0.50453 -0.15463  2.3660 -0.1451
 [2,] -0.18460  2.01499 -1.4656  0.5702
 [3,]  0.41206 -0.94563 -0.5911  0.6568
 [4,] -0.01510  1.88728  2.2698  0.2722
 [5,] -0.67850 -0.48196  0.7322 -0.1656
 [6,]  3.88306  0.25590 -0.9625 -0.5595
 [7,]  0.09948 -0.48730  2.5696 -1.7280
 [8,]  0.38895 -0.07124 -2.0728  2.4206
 [9,] -1.23075  2.09420  1.3673  0.1967
[10,]  0.14671  0.08022 -2.3208  2.5696
Run Code Online (Sandbox Code Playgroud)

Jef*_*eff 5

用法是:sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)并且在参数USE.NAMES“逻辑;如果 TRUE 并且 X 是字符,则使用 X 作为结果的名称,除非它已经有名称。由于此参数遵循...其名称不能缩写。”

names <- c("apple", "bear", "cat", "dog")
x <- sapply(names, FUN = function(y) {
            mat <- matrix(rnorm(10, mean = 0.0, sd = 2.0))
            return(mat)
        })

head(x)
          apple       bear        cat        dog
[1,]  2.8812757  0.4668899 -1.7573046  1.2256461
[2,]  1.6603629 -1.6834094 -0.9703212 -2.1785622
[3,]  0.2418369 -1.8863158 -0.3332608 -0.6614945
[4,]  4.2053458 -1.3841535 -1.3637611  1.6450790
[5,] -1.5078531 -1.7479366 -2.5106405  0.4317063
[6,]  1.8203799  2.0683913 -0.8045522  1.6639686
Run Code Online (Sandbox Code Playgroud)