【问题标题】:Is it possible to view an HTML table in the viewer pane?是否可以在查看器窗格中查看 HTML 表格?
【发布时间】:2014-05-16 19:47:20
【问题描述】:

我想知道是否有任何功能可以轻松地在 RStudio 的查看器窗格中可视化 html 对象。例如,我想知道是否可以在查看器窗格中查看 html 表。

library("Quandl")
library("knitr")
df  <-  Quandl("FBI_UCR/USCRIME_TYPE_VIOLENTCRIMERATE")
kable(head(df[,1:9]), format = 'html', table.attr = "class=nofluid")

【问题讨论】:

  • 我认为您可以将您的对象转换为 gridExtra 包中的 gridTable grob 并绘制它(参见例如 stackoverflow.com/questions/15045396/…)。
  • 不错的技巧,但这不是 HTML 表格。

标签: r rstudio


【解决方案1】:

我有一个适用于 kable 表的解决方案。

kable(iris) %>% kableExtra::kable_styling()

这会自动显示在查看器窗格中。不需要临时文件。

【讨论】:

    【解决方案2】:

    我的htmlTable 包中有这个功能,而且功能相当简单:

    print.htmlTable<- function(x, useViewer = TRUE, ...){
      # Don't use viewer if in knitr
      if (useViewer &&
            !"package:knitr" %in% search()){
    
        htmlFile <- tempfile(fileext=".html")
        htmlPage <- paste("<html>",
                          "<head>",
                          "<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\">",
                          "</head>",
                          "<body>",
                          "<div style=\"margin: 0 auto; display: table; margin-top: 1em;\">",
                          x,
                          "</div>",
                          "</body>",
                          "</html>", sep="\n")
        cat(htmlPage, file=htmlFile)
    
        viewer <- getOption("viewer")
        if (!is.null(viewer) &&
              is.function(viewer)){
          # (code to write some content to the file)
          viewer(htmlFile)
        }else{
          utils::browseURL(htmlFile)
        }
      }else{
        cat(x)
      }
    }
    

    RStudio recommends 你使用 getOption("viewer") 而不是 @Ramnath 的建议,原始的 RStudio::viewer()。如果您不使用 RStudio,我的解决方案还添加了 utils::browserURL()。我从 this 博客文章中得到了这个想法。

    【讨论】:

    • 看起来htmlTable 现在是它自己的包了。
    • 这很棒。对于那些想要查看已经写入的文件的人,您可以轻松修改上述内容:因此(1)在函数声明中添加一个标志--> print.htmlTable if(as.file.path){ x view.htmlFile
    【解决方案3】:

    这是在 RStudio 中执行此操作的快速方法

    view_kable <- function(x, ...){
      tab <- paste(capture.output(kable(x, ...)), collapse = '\n')
      tf <- tempfile(fileext = ".html")
      writeLines(tab, tf)
      rstudio::viewer(tf)
    }
    view_kable(head(df[,1:9]), format = 'html', table.attr = "class=nofluid")
    

    如果kable 函数可以返回kable 类的对象,那么可以将view_kable 重命名为print.kable,在这种情况下,只需调用kable 函数就会在查看器中打开表格。如果您认为这很有用,请继续在knitr github 页面上提交功能请求。

    【讨论】:

    • 效果很好,尽管需要将 rstudio::viewer 更改为 rstudioapi::viewer
    【解决方案4】:

    正如this RStudio Support page 所解释的,关键是使用tempfile()

    请注意,查看器窗格只能用于本地 Web 内容。这 内容可以是写入会话的静态 HTML 文件 临时目录(即带有由 tempfile 生成的路径的文件 函数)或本地运行的 Web 应用程序。

    请参阅我对this question 的回答以获取基本示例。

    【讨论】:

      【解决方案5】:

      对于kable对象,我们可以使用print.kableExtra

      library(knitr)
      
      x <- kable(head(iris), format = "html")
      
      library(kableExtra)
      
      class(x) <- c("kableExtra", class(x))
      print(x)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        相关资源
        最近更新 更多