【问题标题】:KableExtra table works with knit button but does not work when rendered from a separate fileKableExtra 表适用于编织按钮,但在从单独的文件呈现时不起作用
【发布时间】:2020-03-31 14:57:15
【问题描述】:

我知道有人问过类似的问题。但是,正如您将在我的代码中看到的那样,我已经尝试了所有这些解决方案,但它们都没有奏效。最奇怪的是,我的代码已经正常工作了几个月,直到本周才停止工作。以下代码位于 RMD 文件中,并在使用 R Studio 上的 knit 按钮时完全按照我的需要生成表格:

---
title: "Cars"
author: "xxx"
date: '`r format(Sys.Date(), "%B-%d-%Y")`'
always_allow_html: yes
output: pdf_document
classoption: portrait
header-includes:
  - \usepackage{booktabs}
  - \usepackage{longtable}
  - \usepackage{array}
  - \usepackage{multirow}
  - \usepackage{wrapfig}
  - \usepackage{float}
  - \usepackage{colortbl}
  - \usepackage{pdflscape}
  - \usepackage{tabu}
  - \usepackage{threeparttable}
  - \usepackage{threeparttablex}
  - \usepackage[normalem]{ulem}
  - \usepackage{makecell}
  - \usepackage{xcolor}
---

```{r}
library(kableExtra)
library(dplyr)

data <- cars

Portfolio <- c(4,7)

data%>%
  mutate(
    speed = cell_spec(speed, background= ifelse(speed %in% Portfolio, "yellow", "white"))
  ) %>%
  kable(escape = F, longtable= T) %>%
  kable_styling("striped", full_width = F, latex_options = "repeat_header")
```

表格如下所示:

它也继续到下一页。

我需要多次生成此报告,因此我有一个单独的 R 文件,我在其中将先前代码的呈现循环到单独的 PDF 文件中。

# load packages
library(knitr)
library(rmarkdown)
library(kableExtra)
library(dplyr)


Portfolio <- c( 4,7)


# for each bond in the portfolio create a report
# these reports are saved in output_dir with the name specified by output_file
for (i in 1:length(Portfolio)){

  Bond <- Portfolio[i]

  rmarkdown::render("Table.Rmd" ,
                    output_format = "pdf_document",
                    output_file =  paste(Bond, ".pdf", sep=''),
                    output_dir = paste('Reports_',format(Sys.Date(), "%b-%d-%y")),
                    envir = new.env(
                      Bond <- Portfolio[i]
                    ))


} 

此代码呈现 PDF,我的报告中的所有内容看起来都相同,但 kableExtra 表除外。下面是这张桌子现在的样子:

这是我第一次提出关于 SO 的问题。我将不胜感激任何帮助让我的代码工作以及关于如何在未来更好地格式化我的问题的建议。

【问题讨论】:

    标签: r dplyr r-markdown knitr kableextra


    【解决方案1】:

    我认为您需要为cell_speckable 调用指定格式(乳胶)。我真的不明白为什么,但似乎工作..

    data %>%
      mutate(
        speed = cell_spec(speed, format = "latex", background= ifelse(speed %in% Portfolio, "yellow", "white"))
      ) %>%
      kable(format = "latex", escape = F, longtable= T) %>%
      kable_styling("striped", full_width = F, latex_options = "repeat_header")
    

    【讨论】:

    • 这行得通。谢谢你。在我之前尝试解决这个问题时,我曾尝试在 kable() 中输入格式,但在 cell_spec() 中没有。知道为什么以前没有这个代码可以工作,而现在不行吗?
    • 我不太确定。我希望 render() 调用中的输出格式将决定 kable() 调用的工作方式,这意味着没有必要将格式显式设置为 latex,但这似乎没有发生。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多