是否可以在查看器窗格中查看HTML表?

时间:2014-04-04 13:08:30

标签: r rstudio

我想知道是否有任何函数可以很容易地在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")

5 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:6)

这是在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页面上提交功能请求。

答案 2 :(得分:6)

我最近将此功能添加到htmlTable()中的Gmisc-package功能,功能相当简单:

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()。我的解决方案还添加了utils :: browserURL(),以防你不使用RStudio。我从this博文中得到了这个想法。

答案 3 :(得分:1)

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

  

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

请参阅我对this question的回答,了解一个简单的例子。

答案 4 :(得分:0)

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

library(knitr)

x <- kable(head(iris), format = "html")

library(kableExtra)

class(x) <- c("kableExtra", class(x))
print(x)