我最近开始使用this R包用于表格,我对它印象非常深刻。然而,我似乎无法弄清楚的一件事是如何在单元格中获得换行符。这是我试过的
library(tidyverse)
library(huxtable)
cars <- mtcars %>%
mutate(car = rownames(.),
car = str_replace(car, " ", "\n")) %>%
slice(1:5) %>%
select(car, cyl, hp)
cars
# A tibble: 5 x 3
car cyl hp
<chr> <dbl> <dbl>
1 "Mazda\nRX4" 6.00 110
2 "Mazda\nRX4 Wag" 6.00 110
3 "Datsun\n710" 4.00 93.0
4 "Hornet\n4 Drive" 6.00 110
5 "Hornet\nSportabout" 8.00 175
ht <- as_hux(cars, add_colnames = TRUE)
escape_contents(ht) <- TRUE
ht
但最终没有换行符,如下面的截图
escape_contents
部分似乎没有什么区别。
我不确定我想要的是否可行,但我知道它在其他包中(例如,DT::datatable
)。如果可能的话,我真的很想使用huxtable,因为我喜欢这个包的设计和灵活性。
任何想法都会很棒。
编辑:我应该已经指定我希望将其用于PDF。
答案 0 :(得分:2)
根据Escaping HTML or LaTeX,
您应该使用escape_contents(ht) <- FALSE
并使用<br>
代码而不是\n
library(tidyverse)
library(huxtable)
cars <- mtcars %>% mutate(car = rownames(.),
car = str_replace(car, " ", "<br>")) %>%
slice(1:5) %>% select(car, cyl, hp)
ht <- as_hux(cars, add_colnames = TRUE)
escape_contents(ht) <- FALSE
ht
请注意,输出是一个Rmarkdown文档,并感谢包信息。看起来不错。以下是我的输出
答案 1 :(得分:0)
好的,因此,结合来自this LaTeX StackExchange post和this classic XKCD的见解,我得到了这一点:
library(tidyverse)
library(huxtable)
cars <- mtcars %>%
mutate(car = rownames(.),
car = str_replace(car, "(\\S*)\\s(.*)",
"\\\\vtop{\\\\hbox{\\\\strut \\1}\\\\hbox{\\\\strut \\2}}")) %>%
slice(1:5) %>%
select(car, cyl, hp)
ht <- as_hux(cars, add_colnames = TRUE) %>%
set_escape_contents(1:6, 1, FALSE)
theme_article(ht)
给出以下PDF输出:
当然,如果您是手工构建自己的单元而不是使用str_replace
,则不需要很多转义符。请注意,对于具有换行符的单元格,将set_escape_contents
放在FALSE
上至关重要。
答案 2 :(得分:0)
尝试此操作,以减少反斜杠的数量:
library(tidyverse)
library(huxtable)
cars <- mtcars %>% mutate(car = rownames(.))
cars$car <- str_replace(cars$car, " ", "\\\\newline ")
cars %>%
as_hux(add_colnames = TRUE) %>%
set_wrap(TRUE) %>%
set_escape_contents(everywhere, "car", FALSE) %>%
quick_pdf()
我相信,set_wrap()
调用对于LaTeX表接受换行是必需的。
如果您想转义包含换行符的单元格的不同部分,则可以手动执行,例如与xtable::sanitize()
。