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

mwkjh3gx  于 2023-04-18  发布在  其他
关注(0)|答案(3)|浏览(146)

我尝试使用r markdownkablekableExtra输出一个latex表。我需要使用条件逻辑来使用cell_spec. But为我的表添加颜色。使用pdf输出,它显示latex代码如下:
pdf output with latex code
如果我在kable()中添加escape = false,它会给出以下错误:
!Missing $ inserted. $l.142 sepal_ length & sepal_width & petal_length & petal_width & Species\以下是您使用的TeX内存:492970中的14185个字符串208670个字符串字符3125261中的323511个字存储器3000000中的17834个多字母控制序列15000+200000中的23725个字字体信息40种字体3000000中的9000 1141断字例外8191中的41 i,9 n,38 p,1027 b,272 s堆栈位置5000 i,500 n,10000 p,200000 b,50000 s中的
我是rmarkdownlatex的新手,请帮我解决这个问题。谢谢。
这是我的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")

}
s3fp2yjn

s3fp2yjn1#

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

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

9cbw7uwe2#

在我的例子中,我需要删除块名中的下划线。
例如,这起作用:

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

但这并不起作用:
summaryTableBaseline %>%
    kable(col.names = c("Docker Image", "Min", "Mean", "Median", "Max"),
          caption = "Baseline Benchmark") %>%
    kable_styling()
wlwcrazw

wlwcrazw3#

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

在@steveb的好评论的基础上,我推广了这个解决方案,使它不仅可以在列名上工作(就像replace_all一样)。

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

说明:

  1. purrr::map为此处理每个表单元格。
  2. purrr::map_df将结果放入 Dataframe 中
    1.作为参数,purrr::map接受purrr快捷方式为~且函数分段为.x的函数(对于每个元素)

相关问题