9

我之前问过一个关于如何在 R 中导出 HTML 表格并控制线条边框的问题。

我习惯了 LaTeX,当您创建表格时,表格的格式很大程度上取决于当时出现的文本和标记。这适用于 Sweave,因为您的 R 代码块可以在该点输出 LaTeX 表格标记。我也知道有类似的工具xtable可以为表格生成 HTML 标记。

然而,对 HTML 表格的控制似乎依赖于样式表,样式表是为了出现在文档的标题中,而不是在放置 R 代码块的位置。当然,我可以只将内容放在样式表中,但在科学应用程序中,通常会有一些非常具体的表格格式,在某些方面因表格而异。

因此,我的问题:

  • 一般来说,如果输出格式需要在文档中的单独位置创建输出(即标题中表格的 CSS),您如何使用 R Markdown 等文学编程甚至从原始 HTML 格式化 HTML 表格R 代码块放置在哪里(即表本身在正文中)?
4

5 回答 5

5

我可以想出三种方法而不用弄乱你的工具链,它们都有点老套。

  1. 只需<style>在体内输出右边。这在技术上是无效的,但它可以在任何主流浏览器中正常工作。

  2. 发出在运行时创建<style>块并将其附加到头部的 JavaScript(这是一种方式)。这在 HTML 源代码和 R 代码中看起来有点粗糙,但它会起作用并且会验证。

  3. 使用范围样式块。这正是您正在寻找的,除了 scope 属性是 HTML5 的新属性,并且尚未在任何主要浏览器中实现。但是,如果您将样式基于唯一生成的 ID(即,您的规则是这样编写的,即使它们适用于整个文档也不会弄乱任何东西),我想浏览器只会忽略“作用域”属性和所有内容将正常工作 - 然后这实际上成为选项 1 的一个版本,恰好验证!

(我个人会选择#3。)

如果您还没有,那么值得在 RStudio 支持论坛上开始讨论这个问题;尽管这不是严格意义上的 RStudio 问题,但我们显然在 R Markdown 中发布报告的端到端方案上做了大量工作,并且很想了解更多关于您的具体示例的信息。表格显然将成为人们使用此报告所做工作的重要组成部分,我们知道这是目前的一个弱点,我们确实希望在未来的版本中解决这个问题。

于 2012-06-05T07:53:11.263 回答
2

另一种方法是使用pander作为 R 降价后端(对不起这个类似营销的答案,但我确实认为我的Pandoc.brew函数可能非常方便)。

它类似于knitr(解析/评估 Markdown 格式文件中的 R 命令),但使用brewR 代码块的语法(例如<%...%>,用于一般 R 代码 - 像循环等以及<%=...%>在块中返回结果)。但不同于brewasPandoc.brew不仅cat会产生代码块,而且会运行我的pander通用方法,该方法将(相当多种)R 对象转换为(恕我直言)漂亮的 Pandoc 降价格式。

因此,Pandoc.brew在 markdown 格式的文件上运行会产生一个干净的 markdown 文件,其中所有 R 代码块都运行 - 而且您不必处理xtable和其他调整(甚至不需要绘图,因为导致图像的所有 R 代码块都呈现为png文件并链接在降价文本文件中)。

关于我开始在这里回答的原因:pander您可以将特殊选项传递给pandoc,例如将自定义 CSS 样式表(或 JS 等)添加到您生成的 HTML 的标题中,请参阅Pandoc 主页上的详细信息。基于此,您可以轻松添加 CSS 文件,甚至只是添加一堆样式参数。这可以panderPandoc.convert's来完成option。顺便说一句,您甚至不必使用我的分叉brew函数,您可以使用 eg 生成降价文件knitr并使用上述函数调用 Pandoc

pander将一些 CSS/JS 添加到生成的 HTML 文件中,这将生成(恕我直言)非常漂亮的输出,但您可以轻松地对其进行自定义并在那里添加您自己的文件。

例如:默认情况下,你会得到这个基于这个 markdown的HTML 文件,它是从这个非常短的markdown 语法 brew 文件中编辑的。顺便说一句,我的 github 页面也是由我的 markdown 解析器生成/自动设置样式的。如果您能尝试一下,我将不胜感激:)Pandoc.brew


注意:要尝试上述调用,您需要Pandoc预先安装,还需要最新版本的两者rapport,两者 pander. 请参阅安装详细信息

于 2012-06-02T11:36:36.420 回答
2

不能完全解决问题的一种选择是使用gvisTable

这是一个基本的 gvisTable:

```{r message=FALSE}
# install.packages("googleVis")
library(googleVis)
library(MASS)
data(Animals)
```

```{r results='asis'}
tab1 <- gvisTable(Animals, 
                   options = list(width = 600, height = 650, 
                                  page = "enable",
                                  pageSize = nrow(Animals)))
print(tab1, "chart")
```
  • ?print.gvis解释了打印gvis对象的一些选项。
  • 尤其是 R Markdown 文档需要该tag="chart"选项,因为这意味着输出正是对象所需的,而不是默认的完整 HTML 页面。
  • 在这里查看这个的输出和更多内容
于 2012-06-05T06:54:38.350 回答
1

好的,希望我现在明白了。你应该设置一些额外的 knitr 选项,如果你愿意,你可以动态地 cat() css。

<!DOCTYPE html>
<head>
<style type="text/css">
.greenback {
  background-color: teal;
    color: white;
}
.greenback td {
  border: dotted gray;
}
.bluescreen {
    background-color: blue;
    color: white;
}
.bluescreen td {
  border: thick solid;
  padding:2px;
  margin:2px;
}

</style>
</head>

<body>
<table class="greenback">
<tr><td>Hello</td><td>Mars</td><tr>
<tr><td>World</td><td>Moon</td><tr>
</table>

Could use some xtable code here instead.

<!--begin.rcode
cat('
<table class="bluescreen">
<tr><td>Hello</td><td>Mars</td><tr>
<tr><td>World</td><td>Moon</td><tr>
</table>
')
    end.rcode-->

</body>
</html>
于 2012-06-01T07:47:15.840 回答
1

Neil Saunders 有一个关于为使用 RStudio 生成的 HTML 自定义 CSS的教程。它显示了如何修改内置样式文件并获取此替代文件。

于 2012-08-27T01:03:09.743 回答