【问题标题】:Print method for multiple matrices多个矩阵的打印方法
【发布时间】:2014-12-16 20:31:47
【问题描述】:

有人可以建议一种方法来print 在终端窗口中并排几个矩阵。

对于矩阵m1m2,我想要下面的输出。

m1 <- m2 <- matrix(1:4, nrow=2, dimnames=list(c("a", "b"), c("d", "e")))

期望的输出

m1      m2  
  d e     d e
a 1 3   a 1 3
b 2 4   b 2 4

原因是我在计算中使用了几个 2x2 矩阵并希望在 Rmarkdown 文档中显示。打印长度方式时,它占用了太多的页面。谢谢。

编辑

我的解决方案尝试

fn <- function(x) setNames(data.frame(.=paste("  ", rownames(x)), x, 
             check.names=F, row.names=NULL),c(paste(substitute(x)), colnames(x)))
cbind(fn(m1), fn(m2))
#     m1 d e   m2 f g
#1     a 1 3    v 1 3
#2     b 2 4    w 2 4

但这当然看起来不太好。

【问题讨论】:

  • 您需要能够访问这些值,还是纯粹是为了美观?意思是print方法可以用字符串代替数值吗?
  • 嗨,@RichardScriven。不,我不需要访问/计算它们,它是屏幕上的print
  • 是的,我认为这可能很棘手,但感谢您的关注。我能做的最好的事情是fn &lt;- function(x) data.frame(.=paste(" ", rownames(x)), x, check.names=F, row.names=NULL) ; cbind(fn(m1), fn(m2)) 不完全在那里。
  • 我在尝试使用capture.output(list(m1=m1, m2=m2)),然后在结果上使用cat。基本上就像一个并排列表
  • 嗯,忘了 capture.output,这可能是一种方法。生病看看。谢谢。

标签: r matrix


【解决方案1】:

有点hack-ish,但我相信这是你想要的:

m1 <- m2 <- m3 <- m4 <- matrix(1:4, nrow=2, dimnames=list(c("a", "b"), c("d", "e")))
fn <- function(x) setNames(data.frame(.=paste("", rownames(x)), x, check.names=F, row.names=NULL),c(" ", colnames(x)))
matrix.names <- Filter( function(x) 'matrix' %in% class( get(x) ), ls(pattern = "m") )
matrix.list <- lapply(matrix.names, get)
matrix.chain <- do.call(cbind, lapply(matrix.list, fn))
cat(" ", paste0(matrix.names, collapse = "     "), "\n"); print(matrix.chain, row.names = FALSE)
  m1     m2     m3     m4 
    d e    d e    d e    d e
  a 1 3  a 1 3  a 1 3  a 1 3
  b 2 4  b 2 4  b 2 4  b 2 4

【讨论】:

  • 感谢您的回答。 cat 方法效果很好。
  • 这个解决方案一点也不通用。有人可以把它变成一个接受任意矩阵列表的函数吗?
猜你喜欢
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多