[英]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.