【问题标题】:R paste matrix cells togetherR将矩阵单元粘贴在一起
【发布时间】:2022-05-08 21:42:33
【问题描述】:

我想将矩阵的单元格粘贴在一起,但是当我粘贴()时,它返回一个向量。 R中是否有相同的直接功能?

mat <- matrix(1:4,2,2)
paste(mat,mat,sep=",")

我希望输出为

     [,1] [,2]
[1,]  1,1  2,2
[2,]  3,3  4,4

【问题讨论】:

    标签: r


    【解决方案1】:

    R 中的矩阵只是一个具有指定维度的属性的向量。当你paste他们在一起时,你只是失去了维度属性。

    所以,

    matrix(paste(mat,mat,sep=","),2,2)
    

    或者,例如

    mat1 <- paste(mat,mat,sep=",")
    > mat1
    [1] "1,1" "2,2" "3,3" "4,4"
    > dim(mat1) <- c(2,2)
    > mat1
         [,1]  [,2] 
    [1,] "1,1" "3,3"
    [2,] "2,2" "4,4"
    

    这只是一个示例,说明如何编写一个简单的函数来执行此操作:

    paste_matrix <- function(...,sep = " ",collapse = NULL){
        n <- max(sapply(list(...),nrow))
        p <- max(sapply(list(...),ncol))
    
        matrix(paste(...,sep = sep,collapse = collapse),n,p)
    }
    

    ...但是您想要的特定功能将取决于您希望它如何处理两个以上的矩阵、不同维度的矩阵或可能完全不可接受的输入(随机对象、NULL 等)。

    这个特殊的函数循环使用向量并输出一个矩阵,其维数与各种输入中最大的匹配。

    【讨论】:

    • 是的,我明白了。但是想知道R中是否有一个功能可以将单元格粘贴在一起而不会丢失尺寸属性。就像我们可以在不丢失维度属性的情况下添加和减去矩阵。
    • @anonR 好吧,我的回答说明了你会如何写一个,不......? (对输入和尺寸的适用性进行一些检查。)
    • @anonR - 你可以做mat[] &lt;- paste(mat, mat, sep = ","),但这会覆盖原来的mat
    【解决方案2】:

    Joran 的另一种方法是使用[] 而不是重构矩阵。这样你也可以保留 colnames 例如:

    truc <- matrix(c(1:3, LETTERS[3:1]), ncol=2)
    colnames(truc) <- c("A", "B")
    truc[] <- paste(truc, truc, sep=",")
    truc
    #      A     B    
    # [1,] "1,1" "C,C"
    # [2,] "2,2" "B,B"
    # [3,] "3,3" "A,A"
    

    【讨论】:

    • 我最喜欢这个答案,因为它不需要矩阵维度的先验知识。
    【解决方案3】:

    或者使用sprintfdim&lt;-

    `dim<-`(sprintf('%d,%d', mat, mat), dim(mat))
    #      [,1]  [,2] 
    #[1,] "1,1" "3,3"
    #[2,] "2,2" "4,4"
    

    【讨论】:

    【解决方案4】:

    ascii 库有一个函数 paste.matrix 用于跨矩阵按元素粘贴。输出是所需结果的转置,但这很容易通过t() 解决。

    library(ascii)
    mat <- matrix(1:4,2,2)
    t(paste.matrix(mat,mat,sep=","))
         [,1]  [,2] 
    [1,] "1,1" "2,2"
    [2,] "3,3" "4,4"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 2013-01-12
      • 2010-11-17
      • 1970-01-01
      • 2011-09-18
      • 2023-01-10
      相关资源
      最近更新 更多