r - 将 for 循环应用于 knitr 中的 xtable 时出错

标签 r latex knitr xtable

我正在使用 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

最佳答案

你很接近。问题出在您的 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
  )

这应该给你你想要的:

xtable_output

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

关于r - 将 for 循环应用于 knitr 中的 xtable 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30309311/

相关文章:

r - 在 httr (R) 中使用 GET 时出现授权错误 401。

latex - 如何使用 LaTeX 创建时间线?

r - 在 Rstudio 的 RMarkdown 中循环生成 Pander 表

尊重 knitr 中的全局选项

r - 子架构 'R' 未安装(在 RStudio 中安装某些 CRAN 软件包)

r - 使用 sum 对数据进行分类的 Case_when 问题 - R/dplyr 解决方案

r - melt.data.table 和 na.rm 作为 measure.vars 列表的第一个元素

string - 在 Python 3 中格式化 LaTeX 数学字符串

r - 如何将 .sty 文件添加到 rmarkdown pdf_output

r - 如何保存和编辑电缆打印的内容?