单元格内的换行符为huxtable表格

时间:2018-03-21 04:17:06

标签: r r-markdown

我最近开始使用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

但最终没有换行符,如下面的截图

huxtable

escape_contents部分似乎没有什么区别。

我不确定我想要的是否可行,但我知道它在其他包中(例如,DT::datatable)。如果可能的话,我真的很想使用huxtable,因为我喜欢这个包的设计和灵活性。

任何想法都会很棒。

编辑:我应该已经指定我希望将其用于PDF。

3 个答案:

答案 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文档,并感谢包信息。看起来不错。以下是我的输出

enter image description here

答案 1 :(得分:0)

好的,因此,结合来自this LaTeX StackExchange postthis 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输出:

enter image description here

当然,如果您是手工构建自己的单元而不是使用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()

enter image description here

我相信,set_wrap()调用对于LaTeX表接受换行是必需的。

如果您想转义包含换行符的单元格的不同部分,则可以手动执行,例如与xtable::sanitize()