KableExtra表可使用编织按钮,但从单独的文件进行渲染时不起作用

时间:2019-12-06 15:36:20

标签: r dplyr r-markdown knitr kableextra

我知道有人问过类似的问题。但是,正如您在我的代码中看到的那样,我已经尝试了所有这些解决方案,但没有一个起作用。最奇怪的部分是我的代码已经正常运行了几个月,而直到本周才停止工作。以下代码位于RMD文件中,并在使用R Studio上的“编织”按钮时完全按照我的要求生成表:

---
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")
```

该表如下所示:

Working table

它也继续到下一页。

我需要多次生成此报告,因此我有一个单独的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表外,报告中的所有内容均相同。这是这张桌子现在的样子:

Non Working Table

这是我第一次问关于SO的问题。对于使我的代码正常运行的任何帮助,以及将来如何更好地格式化我的问题的建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为您需要同时为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")