Flextable :在数据框中使用上标
Flextable : using superscript in the dataframe
这个问题被问了几次,但令人惊讶的是,没有人回答。
我希望数据框中的一些数字以上标形式出现。
函数 compose
和 display
在这里不适用,因为我还不知道数据框中的哪些值会出现在上标中(我的表是自动生成的)。
我尝试将 ^8^
like 用于 kable
、$^-3$$
、paste(expression(10^2))
、"H\textsubscript{123}"
等
没有任何效果!!帮助 !我拔头发...
library(flextable)
bab = data.frame(c( "10\textsubscript{-3}",
paste(as.expression(10^-3)), '10%-3%', '10^-2^' ))
flextable(bab)
我从 R
编织到 html。
在 HTML 中,您使用 <sup>-3</sup>
之类的东西来做上标,使用 <sub>-3</sub>
来做下标。但是,如果将它们放入 table 的单元格中,您将看到显示的全文,它不会被解释为 HTML,因为 flextable
转义了尖括号。
kable()
函数有一个参数 escape = FALSE
可以关闭它,但是 flextable
没有:见 https://github.com/davidgohel/flextable/issues/156。但是,有一种绕过此限制的 hackish 方法:将 htmlEscape()
函数替换为不执行任何操作的函数。
例如,
```{r}
library(flextable)
env <- parent.env(loadNamespace("flextable")) # The imports
unlockBinding("htmlEscape", env)
assign("htmlEscape", function(text, attribute = FALSE) text, envir=env)
lockBinding("htmlEscape", env)
bab = data.frame(x = "10<sup>-3</sup>")
flextable(bab)
```
这会将 table 显示为
执行此操作时要小心:在您的真实 table 中可能存在您确实想要 HTML 转义的情况,此代码将在文档的其余部分禁用它。如果您在 R 会话中执行此代码,它将在会话的其余部分禁用转义。
如果您考虑在提交给 CRAN 的包中使用这样的文档,那就算了。您不应该在您希望其他人使用的代码中乱用这样的绑定。
编辑添加:
事实上,有一种方法可以在不使用上面给出的 hack 的情况下执行此操作。这篇文章中对此进行了描述:https://davidgohel.github.io/flextable/articles/display.html#sugar-functions-for-complex-formatting。这个想法是用 as_paragraph
、as_sup
、as_sub
等调用来替换需要上标或下标的条目:
```{r}
library(flextable)
bab <- data.frame(x = "dummy")
bab <- flextable(bab)
bab <- compose(bab, part = "body", i = 1, j = 1,
value = as_paragraph("10",
as_sup("-3")))
bab
```
这个肯定比我给的方法安全
这个问题被问了几次,但令人惊讶的是,没有人回答。
我希望数据框中的一些数字以上标形式出现。
函数 compose
和 display
在这里不适用,因为我还不知道数据框中的哪些值会出现在上标中(我的表是自动生成的)。
我尝试将 ^8^
like 用于 kable
、$^-3$$
、paste(expression(10^2))
、"H\textsubscript{123}"
等
没有任何效果!!帮助 !我拔头发...
library(flextable)
bab = data.frame(c( "10\textsubscript{-3}",
paste(as.expression(10^-3)), '10%-3%', '10^-2^' ))
flextable(bab)
我从 R
编织到 html。
在 HTML 中,您使用 <sup>-3</sup>
之类的东西来做上标,使用 <sub>-3</sub>
来做下标。但是,如果将它们放入 table 的单元格中,您将看到显示的全文,它不会被解释为 HTML,因为 flextable
转义了尖括号。
kable()
函数有一个参数 escape = FALSE
可以关闭它,但是 flextable
没有:见 https://github.com/davidgohel/flextable/issues/156。但是,有一种绕过此限制的 hackish 方法:将 htmlEscape()
函数替换为不执行任何操作的函数。
例如,
```{r}
library(flextable)
env <- parent.env(loadNamespace("flextable")) # The imports
unlockBinding("htmlEscape", env)
assign("htmlEscape", function(text, attribute = FALSE) text, envir=env)
lockBinding("htmlEscape", env)
bab = data.frame(x = "10<sup>-3</sup>")
flextable(bab)
```
这会将 table 显示为
执行此操作时要小心:在您的真实 table 中可能存在您确实想要 HTML 转义的情况,此代码将在文档的其余部分禁用它。如果您在 R 会话中执行此代码,它将在会话的其余部分禁用转义。
如果您考虑在提交给 CRAN 的包中使用这样的文档,那就算了。您不应该在您希望其他人使用的代码中乱用这样的绑定。
编辑添加:
事实上,有一种方法可以在不使用上面给出的 hack 的情况下执行此操作。这篇文章中对此进行了描述:https://davidgohel.github.io/flextable/articles/display.html#sugar-functions-for-complex-formatting。这个想法是用 as_paragraph
、as_sup
、as_sub
等调用来替换需要上标或下标的条目:
```{r}
library(flextable)
bab <- data.frame(x = "dummy")
bab <- flextable(bab)
bab <- compose(bab, part = "body", i = 1, j = 1,
value = as_paragraph("10",
as_sup("-3")))
bab
```
这个肯定比我给的方法安全