Следующее содержимое файла .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.
Это предназначено?Как я могу обойти это, и чтобы числа в скобках отображались в виде вывода html?
Вывод knitr::kable
выглядит нормально, показывая:
<td style="text-align:left;"> (1) </td>
Подробности:
- Использование knitr 1.20
- RStudio Server 1.1.453
- обратите внимание, что удаление
format = "html"
не решает проблему, как в реальном контексте, я хотел бы сделать расширенное форматирование с CSS, например, на основе классов произведенныхтаблицы
A быстрое решение проблемы , основанное на принятом ответе Майкла Харпера, может быть следующим методом:
replacechars <- function(x) UseMethod("replacechars")
replacechars.default <- function(x) x
replacechars.character <- function(x) {
x <- gsub("(", "(", x, fixed = TRUE)
x <- gsub(")", ")", 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)