【问题标题】:xtable for arrays用于数组的 xtable
【发布时间】:2012-05-01 05:29:48
【问题描述】:

我正在尝试将 xtable 用于 3 维数组。我最小的例子是

Test <- 
structure(1:8, .Dim = c(2L, 2L, 2L), .Dimnames = list(c("A1", 
"A2"), c("B1", "B2"), c("C1", "C2")))

library(plyr)
library(xtable)

a_ply(.data=Test, .margins=3, function(i) {
  xtable(x = Test[, , i])
      }
)

这会产生以下错误:

  Error in xtable(x = Test[, , i]) : subscript out of bounds

如果您能给我一些解决此问题的建议,我将不胜感激。提前致谢。

【问题讨论】:

  • 你想做什么?预期的结果是什么?
  • 我想在这个简单的例子中通过a_ply打印Test[ , ,1]Test[ , , 2]

标签: r plyr sweave xtable knitr


【解决方案1】:

这是一个旧线程,但我在当前项目中遇到了类似的问题。我想要一个 HTML 表格输出,其标题使用我的数组的第三个暗淡的名称标记。

通过不同地使用我的数组解决了这个问题。这个answer 引导我找到我的解决方案。

x <- 1:dim(Test)[3]
l_ply(x, 
      function(i) cat(print(
                           xtable(Test[,,i],
                                  caption = paste("Heading ",
                                          dimnames(Test)[[3]][i],
                                          sep = "")),
                           type = "html", caption.placement = "top"), 
                         file = "Test.html",
                         append = TRUE))

【讨论】:

    【解决方案2】:

    a_ply 不返回任何内容,因此希望您的函数可以保存这些内容或类似内容。您传递给函数的 i 是基于您提供的边距的数组的子集。所以你先发送 2x2 数组 C1,然后发送 2x2 数组 C2:

    a_ply(Test, 3, function(i) {print(i); print('-----')})
    

    所以用i 索引到你的Test 数组没有意义。

    为什么不只是:

    apply(Test, 3, xtable)
    

    或使用 plyr:

    alply(Test, 3, xtable)
    

    对于编织者:

    a_ply(Test, 3, function(i) print(xtable(i)))
    

    【讨论】:

    • 差不多。他们希望使用 knitr 包含输出,因此他们可能希望他们的函数为 function(x) {print(xtable(x))},然后使用 a_ply 来抑制所有其他输出。
    • @Justin:如果你让我知道如何在这些表格的标题中包含第三维的名称,我将不胜感激。就像第一个表标题中的 C1 和第二个表标题中的 C2 一样。谢谢
    • sapply(dimnames(Test)[[3]], function(i) {print(xtable(Test[,,i], caption=i)); return(NULL)}) 我不知道knitr 很好,但这使得乳胶正常。
    • @Justin:再次感谢您的帮助。除了提供像$C1 NULL 这样的额外内容外,您给定的代码工作正常。我想知道如何摆脱这个。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多