【问题标题】:How to assign column names to matrix within sapply function?如何在 sapply 函数中将列名分配给矩阵?
【发布时间】:2015-04-15 16:49:43
【问题描述】:

我有以下过于简化的示例来演示我的问题。如何将列名分配给通过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

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

> 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

【问题讨论】:

  • 试试do.call(cbind,lapply(1:4, FUN=function(y) {mat &lt;- matrix(rnorm(10,0,2), dimnames=list(NULL, names[y]))}))

标签: r apply sapply


【解决方案1】:

用法是: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

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    相关资源
    最近更新 更多