【问题标题】:Error: Missing $ inserted when using kable错误:使用 kable 时缺少插入的 $
【发布时间】:2019-05-05 11:18:55
【问题描述】:

我正在尝试使用r markdownkablekableExtra 输出乳胶表。我需要使用条件逻辑通过 cell_spec 将颜色添加到我的表中。但是使用pdf输出,它显示乳胶代码如下;

pdf output with latex code

如果我在kable() 中添加escape = false,则会出现以下错误,

!缺少插入的 $。 $ l.142 萼片_ 长度 & sepal_width & 花瓣长度 & 花瓣宽度 & Species\ 这里是你使用了多少 TeX 的内存:14185 个字符串 492970 208670 个字符串字符 3125261 323511 个字 内存超出 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")


}


```

【问题讨论】:

  • 尝试使用其他不带下划线的列名。例如转换使用gsub("_", "\\_", names(data))
  • @MartinSchmelzer,效果很好。谢谢。

标签: latex r latex r-markdown pdflatex kable


【解决方案1】:

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

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

【讨论】:

  • 我做的一件事是,使用dplyr::rename_all,我定义了esc.us &lt;- function(nm) { gsub("_", "\\\\_", nm) },然后通过管道传输数据表如下:data %&gt;% rename_all(esc.us)。可能有更好的方法,但它似乎有效。
【解决方案2】:

就我而言,我需要从块名称中删除下划线。

例如,这是有效的:

```{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()
```

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2022-01-16
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多