当在print语句中使用kable表时,是否有一种方法可以确保unicode符号可见-编织到html时

时间:2019-09-23 20:09:15

标签: html r r-markdown symbols kable

当将kable表编织为html时,当使用print显示kable时,无法显示unicode符号。注意-我需要在print语句中使用kable以便遍历多个站点(如果不使用print,kable似乎无法在循环中工作)。

直接在Rstudio控制台中查看kable表时,以及在未使用knit进行编织时,unicode符号都能正确显示。

与打印一起显示时,它在控制台中正确显示,但在编织时却不能正确显示。出现(在html检查器中,编织时Unicode字符转换为<..>。

我有:

  • 包含为results ='asis'
  • 在kable()中使用过的逸出= FALSE
  • 在我的表中使用了与U + 2190等效的html(例如“↑”)

    #----

     title: "Example of Unicode symbols with kable and print"
     output: html_document
     #----
    
    #```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = TRUE)
    #```
    
    
    #```{r dataset, , include=FALSE}
    library(tidyr)
    library(kableExtra)
    library(purrr)
    
    dat <- tibble(Symbol=c("up arrow", "down arrow", "side arrows"), 
                 htmlCode = c("&#8593;", "&#8595;", "&#8596;"))
    
    #```
    
    
    #```{r kable-tbl, results='asis'}
    tbl_fun <- function(df){
      tbl <- df %>%  kable(escape = F) %>%
      kable_styling(bootstrap_options = c("hover", "condensed"), 
                    full_width = F,  position = "left", fixed_thead = T)
    
      tbl
    }
    
    #this works when knit and when run in Rstudio console directly
    tbl_fun(dat)
    
    #when wrapped in a print function it works when run in Rstudio console directly 
    #but not when knit to html
    print_kable <- function(df) {
            tbl_fun(dat) %>%
                print(format = 'html')
    }
    
    print_kable(dat)
    
    
    #The above was a simplification - in my code I eventually want to iterate over 
    #many parameters, which is why I need to wrap in a print statement....
    #walk(.x = unique(dat$Site), print_kable)
    #```
    

1 个答案:

答案 0 :(得分:0)

是的,似乎kable_styling()正在转义html实体。

我发现规避此行为的方法是将html实体编码为其他实体,然后在完成所有格式设置后,将其替换为有效的代码。

例如,我可以将&darr;编码为@darr@

然后在管道的末端执行以下操作:

kable(...) %>%
    kable_styling(...) %>%
    gsub("@darr@", "&darr;", .) %>%
    cat()

对我有用。

我还考虑了一个更通用的解决方案,可以将任何html实体编码为&<code>.,然后替换为:

kable(...) %>%
    kable_styling(...) %>%
    gsub("&([^.]+).", "&\\1;", .) %>%
    cat()

但是,这不起作用。从字面上看,它将打印&darr;(或任何其他由于替换而导致的html实体)。似乎在第一种情况下,由于在代码中明确提到了“ &darr;”,因此可以这样理解。在后一种尝试中,由于它是动态生成的,因此在我们开始之前已经运行过的markdown解析器无法识别它。

据我所知。也许需要更多的研究,才能找到更通用的解决方案。