【问题标题】:Flextable : using superscript in the dataframeFlextable:在数据框中使用上标
【发布时间】:2020-02-01 20:49:16
【问题描述】:

这个问题被问了几次,但令人惊讶的是,没有给出答案。

我希望我的数据框中的一些数字出现在上标中。 composedisplay 函数在这里不适合,因为我还不知道我的数据框中的哪些值会出现在上标中(我的表是自动生成的)。

我尝试将^8^like 用于kable$$10^-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。

【问题讨论】:

  • 我很确定你不能那样做。您是否尝试过使用 knitr::kablekableExtra 代替?为什么选择flextable
  • @user2554330 说来话长!我使用了flextable,因为我需要合并表格中的一些单元格。使用flextable. It took me a day od adaptation to change my code from kableExtra` 到flextable 会容易得多。
  • 查看我的问题stackoverflow.com/questions/58132626/…stackoverflow.com/questions/58113321/…。非常感谢您的建议!

标签: html markdown r-markdown flextable


【解决方案1】:

在 HTML 中,上标使用<sup>-3</sup>,下标使用<sub>-3</sub>。但是,如果您将它们放入表格的单元格中,您将看到显示的全文,它不会被解释为 HTML,因为flextable 会转义尖括号。

kable() 函数有一个参数escape = FALSE 可以关闭它,但flextable 没有:请参阅https://github.com/davidgohel/flextable/issues/156。但是,有一种破解此限制的方法:将 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)
``` 

这会将表格显示为

如果您这样做,请小心:在您的真实表格中可能存在您确实需要 HTML 转义的情况,并且此代码将在文档的其余部分禁用该转义。如果您在 R 会话中执行此代码,它将禁用会话其余部分的转义。

如果您想在提交给 CRAN 的包中使用这样的文档,那就别管它了。您不应该在您希望其他人使用的代码中搞乱这样的绑定。

编辑添加:

事实上,有一种方法可以在没有上面给出的 hack 的情况下做到这一点。在这篇文章中有描述:https://davidgohel.github.io/flextable/articles/display.html#sugar-functions-for-complex-formatting。想法是将需要上标或下标的条目替换为对as_paragraphas_supas_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
```

这绝对比我给的方法安全。

【讨论】:

  • 我添加了另一个解决方案。
  • 我看了这些功能;但就我而言,我发现它们很难使用,因为要替换的表达式不在特定的单元格中,而是随机放置在表格中。此外,在这些单元格中,除了带有上标的表达式之外,还有其他信息。我想我可以用gsub 创建一个函数,但这会很辛苦。
  • 感谢您提供第二个解决方案 :-)
  • @FloraGrappelli 可能会有所帮助stackoverflow.com/questions/54896192/…
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
相关资源
最近更新 更多