【问题标题】:Error in applying a for loop to an xtable in knitr将 for 循环应用于 knitr 中的 xtable 时出错
【发布时间】:2015-07-30 07:38:14
【问题描述】:

我正在使用 knitr 准备一个 pdf,其中包含使用 xtable 生成的表格。我为表格中的某些单元格添加了粗体字,因此我编写了以下函数:

bold <- function(x, matrix){
        x[] <- lapply(x, as.character)
          for (i in 1:ncol(x)) {   
            yes <- matrix[,i]
              x[yes,i] <- paste('\\textbf{', x[yes,i], '}', sep = "")  
          } 
                print(x, sanitize.text.function = identity)
}

我的意图是对象“l.mat”是一个逻辑矩阵,通过更改矩阵中的 1 和 0,我可以更改哪些单元格是粗体。

该函数似乎产生了预期的结果,但是当我编译文档时,print.xtable 中的“include.rownames = FALSE”参数似乎不起作用,并且我在 pdf 中打印了以下错误:

TRUE Error in rep(" ", nrow(x) + 2): invalid ’times’ argument  

以下是我创建用于逻辑测试的矩阵的方法:

l.vec <- as.logical(c(1,1,1,1,1,
                      1,1,1,1,1,
                      0,0,0,0,0,
                      0,0,0,0,0,
                      0,0,0,0,0,
                      0,0,0,0,1))

l.mat <- matrix(l.vec, nrow = 6, ncol = 5, byrow = TRUE)

这是我打印表格的方式:

x.df.2 <- (xtable(df.2))

x.df.3 <- bold(x.df.2, l.mat)

print.xtable(x.df.3, include.rownames = FALSE)

我在这方面已经完全不了解了,我无法解决这个问题。我觉得我对 xtable、latex 和 knitr 的工作原理和交互方式了解得不够多,无法理解这个错误。有关导致这些错误的原因的任何指导都会非常有帮助。

示例数据框:

df.2 <-     DATE   CY   FY Quarter  XEMPNIN
        275 2043:3 2043 2044       3 3324.391
        276 2043:4 2043 2044       4 3326.214
        277 2044:1 2044 2044       1 3328.492
        278 2044:2 2044 2044       2 3330.100
        279 2044:3 2044 2045       3 3331.963
        280 2044:4 2044 2045       4 3334.248

【问题讨论】:

    标签: r latex knitr xtable


    【解决方案1】:

    你很亲密。问题在于您的 bold() 函数。试试:

    bold <- function(x, matrix) {
    
      x[] <- lapply(x, as.character)
    
      for (i in 1:ncol(x)) {   
        yes <- matrix[,i]
        x[yes,i] <- paste('\\textbf{', x[yes,i], '}', sep = "")  
      } 
      return(x)
    }
    

    并将sanitize.text 添加到print.xtable() 调用中:

    print.xtable(
      x.df.3, 
      include.rownames = FALSE, 
      sanitize.text.function = identity
      )
    

    这应该会给你你想要的:

    一个完全可重现的 .Rnw 文件可用here

    【讨论】:

    • 非常感谢!我不敢相信我离得这么近,我说服自己存在一些复杂的 knitr/latex 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多