错误:使用 kable 时缺少 $ 插入

问题描述 投票:0回答:3

我正在尝试使用

r markdown
kable
kableExtra
输出乳胶表。我需要使用条件逻辑通过 cell_spec 为我的表格添加颜色。但是对于 pdf 输出,它显示乳胶代码如下;

pdf output with latex code

如果我在

escape = false
中添加
kable()
,它会给我以下错误,

!缺少 $ 插入。 $ l.142萼片_ length & sepal_width & petal_length & petal_width & Species\ 这是你使用了多少 TeX 内存:14185 个字符串 out of 492970 208670 字符串字符 out of 3125261 323511 words 内存超出 3000000 17834 多字母控制序列超出 15000+200000 40个字体的23725字字体信息,共3000000个 对于 8191 中的 9000 1141 断字例外 41i,9n,38p,1027b,272s 堆栈位置出 5000i,500n,10000p,200000b,50000s

我是

rmarkdown
的新手,请帮我解决这个问题。谢谢。

这是我的rmd文件代码:

---
title: "Iris Data Table"
output: pdf_document
header-includes: \usepackage [table]{xcolor}
geometry: margin = 1cm
params:
  n: NA
  datafile: "//ad.monash.edu/home/User076/vbed0001/Documents/IRIS.csv" #always set the absolute full path
---

```{r, echo=FALSE, message=FALSE}

d <- read.csv(params$datafile, header = TRUE, sep = ",")

# this uses to remove the warning messages from the pdf file
library(memisc, warn.conflicts = FALSE, quietly=TRUE)

# the package order is important, always kableExtra at the top
#options(kableExtra.latex.load_packages = FALSE)
library(kableExtra)
library(magrittr)
library(formattable)
library(dplyr)
library(knitr) 
library(devtools)


options(knitr.table.format = "latex")

if(params$n == "set"){
dtset <- d %>% filter(Species == "setosa")

dtset <- d %>% filter(Species == "setosa")

dtset %>%
 mutate(
   sepal_length = cell_spec(sepal_length,format = "latex",background = (ifelse(sepal_length>4.5,"#D3D3D3","#ff0000")))

 )%>%
 kable(format = "latex",caption = "Setosa Table")%>%
   kable_styling(position = "center",bootstrap_options = "bordered")


}


```
r latex r-markdown pdflatex kable
3个回答
7
投票

此错误是由于您的数据框中有下划线“_”造成的。在这种情况下,列名称包含下划线。在 TeX 中,此符号用于在数学环境中设置下标。这就是为什么它在普通文本中使用时必须转义 (

\_
) 的原因。删除、转义或替换下划线,例如

names(data) <- gsub("_", "", names(data))    # remove
names(data) <- gsub("_", "\\_", names(data)) # escape
names(data) <- gsub("_", " ", names(data))   # replace with space

3
投票

在我的例子中,我需要从块名称中删除下划线。

例如,这个有效:

```{r summaryTableBaseline, results='asis', echo=FALSE}
summaryTableBaseline %>%
    kable(col.names = c("Docker Image", "Min", "Mean", "Median", "Max"),
          caption = "Baseline Benchmark") %>%
    kable_styling()
```

但这不起作用:

```{r summary_Table_Baseline, results='asis', echo=FALSE}
summaryTableBaseline %>%
    kable(col.names = c("Docker Image", "Min", "Mean", "Median", "Max"),
          caption = "Baseline Benchmark") %>%
    kable_styling()
```

0
投票

数据中任意位置下划线的通用解决方案

基于@steveb 的好评,我概括了解决方案,因此它不仅适用于列名(如

replace_all
所做的那样)。

data %>% map_df(~ gsub("_", "\\\\_", .x))

说明:

  1. purrr::map
    为此处理每个表格单元格。
  2. purrr::map_df
    将结果放入数据框
  3. 作为参数,
    purrr::map
    接受一个函数,其
    purrr
    快捷方式是
    ~
    ,函数参数是
    .x
    (对于每个元素)
© www.soinside.com 2019 - 2024. All rights reserved.