【问题标题】:`image` in Matrix package not showing plot when in loop矩阵包中的“图像”在循环中不显示绘图
【发布时间】:2014-05-14 18:07:47
【问题描述】:

我有一个稀疏矩阵列表,我想为其制作一系列图像。我希望能够循环执行此操作,以便将它们转换为 GIF 或 mpg。

我可以对使用matrix() 命令生成的矩阵正确执行此操作,但如果我使用sparseMatrix() 生成它们,则它不起作用。 例如,这有效:

    mList<-list()
    for (i in 1:4) {mList[[i]]<-matrix(runif(16),nrow=4,ncol=4)}
    for (i in 1:4) {image(mList[[i]])}

这会导致添加 4 个图,我可以在活动图窗口中查看这些图(通过来回浏览历史) 这不起作用:

    mList<-list()
    for (i in 1:4) {mList[[i]]<-sparseMatrix(i=1:4,j=1:4,x=runif(4))}
    for (i in 1:4) {image(mList[[i]])}

什么都没有发生。根本没有创建图像,但没有显示错误消息告诉我原因。 我可以使用例如独立查看每个矩阵图像image(mList[[1]]) 但由于某种原因它拒绝在 for 循环内部工作。

有人知道发生了什么吗?

【问题讨论】:

  • SparseM 包似乎有一个 image 方法,但我在 Matrix 中没有看到用于稀疏矩阵的方法。不过,我可能只是找错地方了。
  • 我认为发布一个问题然后不给正确答案点赞或勾选是非常不礼貌的。仅仅因为您没有包含所有目标,就没有理由不积极地考虑朝着您的(未说明的,最终的)目标迈出的一步是短视的。

标签: r image for-loop matrix sparse-matrix


【解决方案1】:
for (i in 1:4) { plot(image(mList[[i]])) }

成功了。

lapply(mList, image)

也可以。

Matrix:::image 函数返回一个trellis 对象(参见lattice 包)。 print.trellis 函数自动绘制输入到 R 控制台中的任何格子对象。这就是image(mList[[i]]) 起作用的原因。但是,在 for 循环中,从不调用 print.trellis 函数,因此从不绘制绘图。要实际显示情节,您必须执行print(image(mList[[i]]))plot(image(mList[[i]]))

有关详细信息,请参阅

?lattice
getMethod(Matrix:::image,"dgCMatrix")
getMethod(Matrix:::image,"dgTMatrix")
lattice:::print.trellis
lattice:::plot.trellis

【讨论】:

  • 这确实成功地创建了图像。不幸的是,我似乎找不到将列表输入动画构建器的方法,但至少比手工制作要好。
  • 这很有意义。当我用 plot() 包装时它工作得很好,我也可以制作 GIF 和 HTML 动画。非常感谢!
猜你喜欢
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
相关资源
最近更新 更多