如何使用R Markdown或HTMLSwave生成HTML表和附带的CSS?

如何使用R Markdown或HTMLSwave生成HTML表和附带的CSS?,r,R,我以前问过一个关于他的问题 我习惯于在创建表时,表的格式在很大程度上取决于此时出现的文本和标记。这对于Swave很有效,因为您的R代码块可以在此时输出LaTeX表标记。我还知道有一些工具,如xtable,可以为表生成HTML标记 然而,对HTML表的控制似乎依赖于样式表,样式表显示在文档的标题中,而不是R代码块所在的位置。当然,我可以将内容放在样式表中,但在科学应用中,通常会有一些非常具体的表格格式,在某些方面因表格而异 因此,我的问题是: 一般来说,如果输出的格式化需要在文档中的一个单独位置

我以前问过一个关于他的问题

我习惯于在创建表时,表的格式在很大程度上取决于此时出现的文本和标记。这对于Swave很有效,因为您的R代码块可以在此时输出LaTeX表标记。我还知道有一些工具,如
xtable
,可以为表生成HTML标记

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

因此,我的问题是:

  • 一般来说,如果输出的格式化需要在文档中的一个单独位置(即页眉中表格的CSS)创建输出,则如何使用诸如R Markdown之类的可读编程设置HTML表格的格式,或者甚至从原始HTML设置HTML表格的格式(即表格本身在正文中的位置)

    • 好的,希望我现在就拿到了。您应该设置一些附加的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>
      
      
      美元{
      背景色:青色;
      颜色:白色;
      }
      美元td{
      边框:点灰色;
      }
      .蓝屏{
      背景颜色:蓝色;
      颜色:白色;
      }
      .bluescreen td{
      边框:厚实;
      填充:2px;
      保证金:2倍;
      }
      哈洛马尔
      世界之月
      可以在这里使用一些xtable代码。
      
      另一种方法是使用R markdown后端(对于这个类似于营销的答案,我感到很抱歉,但我确实认为我的
      Pandoc.brew
      函数非常方便)

      它类似于
      knitr
      (解析/评估标记格式文件中的R命令),但对R代码块使用
      brew
      语法(例如,对于一般的R代码类循环等使用
      ,对于在块中返回结果使用
      )。但与
      brew
      不同的是
      Pandoc。brew
      不仅生成
      cat
      代码块,而且运行my
      pander
      通用方法,将(种类繁多的)R对象转换为(IMHO)漂亮的Pandoc标记格式

      因此,在标记格式的文件上运行
      Pandoc.brew
      将生成一个干净的标记文件,所有R代码块都将运行-并且您不必处理
      xtable
      和其他调整(甚至不必处理打印,因为生成图像的所有R代码块都将渲染到
      png
      文件并链接到标记文本文件中)

      关于为什么我开始在这里回答:使用
      pander
      可以将特殊选项传递给
      pandoc
      ,例如,在生成的HTML标题中添加自定义CSS样式表(或JS等),请参阅。基于此,您可以轻松添加CSS文件,甚至只添加一组样式参数。这可以通过
      Pandoc.convert
      选项在
      pander
      中完成。顺便说一句,您甚至不必使用我的forked
      brew
      函数,您可以使用例如
      knitr
      生成降价文件,并使用上述函数调用Pandoc

      pander
      在生成的HTML文件中添加了一些CSS/JS,这将生成(IMHO)非常漂亮的输出,但是您可以轻松地自定义它并在其中添加您自己的文件

      例如:默认情况下,您将从这个非常简短的中获得基础,即
      Pandoc.brew
      ed。顺便说一句,我的markdown解析器也会自动生成/设置样式。如果您能试一试,我将不胜感激:)



      注意:要尝试上述调用,您需要预先安装
      Pandoc
      ,还需要两者的最新版本,两者都是
      pander
      。请参阅。

      无法完全解决问题的一个选项是使用
      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")
      ```
      
      `{r message=FALSE}
      #安装.packages(“googleVis”)
      图书馆(谷歌)
      图书馆(弥撒)
      数据(动物)
      ```
      ```{r results='asis'}
      
      tab1我可以想出三种方法而不会弄乱你的工具链,它们都有点老套

    • 只需将
      输出到正文中即可。这在技术上是无效的,但在任何主流浏览器中都可以正常工作

    • 发出JavaScript,在运行时创建
      块并将其附加到头部(单向)。这在HTML源代码和R代码中看起来有点粗俗,但它可以工作并且可以验证

    • 使用一个。这正是您想要的,除了scope属性对HTML5来说是新的,并且还没有在任何主流浏览器中实现。但是,如果您的样式基于唯一生成的ID(即,您的规则的编写方式是,即使它们应用于整个文档,也不会弄乱任何东西),我想浏览器将忽略“scoped”属性,所有内容都将正常工作——那么这将成为选项1的一个有效版本,恰好验证

    • (我个人会同意第三条。)


      如果你还没有,那么值得在RStudio支持论坛上发布一条关于这方面的帖子;尽管严格来说这不是RStudio的问题,但我们显然在R Markdown中发布报告的端到端场景方面做了大量工作,我们很想了解更多关于您的具体示例的信息。显然,表格将是人们处理这些报告的一个重要部分,我们知道这是目前的一个弱点,我们希望在未来的版本中解决这个问题。

      尼尔·桑德斯有一个关于表格的教程。它显示了如何修改内置样式文件,并通过为表提供一个类和特定于类的css来获取该替代文件的源。

      。如果此解决方案不能解决问题,请添加一个计数器示例。@Die