代码之家  ›  专栏  ›  技术社区  ›  Jozef

呈现html时,knitr将(1)更改为<ol>?

  •  5
  • Jozef  · 技术社区  · 6 年前

    .Rmd文件的以下内容:

    ---
    title: "Untitled"
    output:
      html_document: default
    ---
    
    ```{r cars}
    mtcars$am <- sprintf("(%s)", as.character(mtcars$am))
    knitr::kable(mtcars, format = "html")
    ```
    

    <ol><li></li></ol> am 列,而不是括号中的数字(由 sprintf

    这是有意的吗?我如何解决这个问题,并让括号中的数字显示为html输出中的数字?

    产量 knitr::kable 看起来很好,显示:

    <td style="text-align:left;"> (1) </td>

    • 使用knitr 1.20
    • 请注意,删除 format = "html" 无法解决实际环境中的问题,我希望使用css进行高级格式化,例如基于生成表的类

    A. 根据Michael Harper的公认答案,可能是这样一种方法:

    replacechars <- function(x) UseMethod("replacechars")
    replacechars.default <- function(x) x
    replacechars.character <- function(x) {
      x <- gsub("(", "&lpar;", x, fixed = TRUE)
      x <- gsub(")", "&rpar;", x, fixed = TRUE)
      x
    }
    replacechars.factor <- function(x) {
      levels(x) <- replacechars(levels(x))
      x
    }
    replacechars.data.frame <- function(x) {
      dfnames <- names(x)
      x <- data.frame(lapply(x, replacechars), stringsAsFactors = FALSE)
      names(x) <- dfnames
      x
    }
    

    mtcars <- datasets::mtcars
    
    # Create a character with issues
    mtcars$am <- sprintf("(%s)", as.character(mtcars$am))
    
    # Create a factor with issues
    mtcars$hp <- as.factor(mtcars$hp)
    levels(mtcars$hp) <- sprintf("(%s)", levels(mtcars$hp))
    
    replacechars(mtcars)
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Michael Harper    6 年前

    如果您不想删除 format="html" 参数,可以尝试使用HTML字符实体作为括号( &lpar &rpar )然后添加参数 escape = FALSE :

    ```{r cars}
    mtcars$am <- sprintf("&lpar;%s&rpar;", as.character(mtcars$am))
    knitr::kable(mtcars, format = "html", escape = FALSE)
    ```
    

    enter image description here

    但仍然不能完全确定是什么导致了错误。看起来,这个特殊的括号组合是由 .

        2
  •  3
  •   Yihui Xie    5 年前

    另一种解决方案是对括号进行转义,例如。,

    mtcars$am <- sprintf("\\(%s)", as.character(mtcars$am))
    

    那你就不需要了 escape = FALSE .

    看见 https://pandoc.org/MANUAL.html#backslash-escapes