繁体   English   中英

R 将矩阵单元格粘贴在一起

[英]R paste matrix cells together

我想将矩阵的单元格粘贴在一起,但是当我执行 paste() 时,它会返回一个向量。 在R中是否有直接的function?

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

我想要 output 作为

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

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等)。

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

Joran 的另一种方法是使用[]而不是重建矩阵。 通过这种方式,您还可以保留列名,例如:

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"

或者使用带有dim<- sprintf

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

ascii库有一个 function paste.matrix用于跨矩阵按元素粘贴。 output 是对所需结果的转置,但这很容易用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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM