我尝试使用r markdown
、kable
和kableExtra
输出一个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中的
我是rmarkdown
和latex的新手,请帮我解决这个问题。谢谢。
这是我的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")
}
3条答案
按热度按时间s3fp2yjn1#
此错误是由于您的数据框中有下划线“_”。在这种情况下,列名包含下划线。在TeX中,此符号用于在数学环境中设置下标。这就是为什么在普通文本中使用时必须转义(
\_
)。删除,转义或使用例如替换下划线。9cbw7uwe2#
在我的例子中,我需要删除块名中的下划线。
例如,这起作用:
wlwcrazw3#
数据中任意位置下划线的通用解决方案
在@steveb的好评论的基础上,我推广了这个解决方案,使它不仅可以在列名上工作(就像
replace_all
一样)。说明:
purrr::map
为此处理每个表单元格。purrr::map_df
将结果放入 Dataframe 中1.作为参数,
purrr::map
接受purrr
快捷方式为~
且函数分段为.x
的函数(对于每个元素)