在RStudio查看器中查看markdown生成的html

时间:2014-04-09 06:37:01

标签: r r-markdown

我希望在 RStudio viewer 中看到使用html生成的markdown文件,但rstudio::viewer('test.html')会在RStudio外的浏览器中打开我的文件。你能告诉我怎样才能实现这个目标?

THIS示例有效,但我不知道为什么我的示例不能以这种方式工作。

test.html归档它是我们选择新文件时得到的一个简单示例 - > R Markdown。

编辑(根据RomanLuštrik的评论)

library(knitr)
library(markdown)
f <- system.file("examples", "knitr-minimal.Rmd", package = "knitr")
knit(f)
markdownToHTML('knitr-minimal.md',output='knitr-minimal.html')
rstudio::viewer('knitr-minimal.html')

3 个答案:

答案 0 :(得分:6)

关键是使用tempfile(),正如here所述。每当html文件在会话临时目录之外时,Rstudio就不会显示它。

另一方面,这将起作用:

temp.f <- tempfile()
cat("Hello", file = temp.f)
rstudio::viewer(temp.f)

修改

正如@Sebastian Palma在评论中指出的那样,&#34; rst;&#34;包已被&#34; rstudioapi&#34;取代,所以第三行现在应该是:

rstudioapi::viewer(temp.f)

答案 1 :(得分:6)

在我的RStudio版本(0.98.994)上,点击&#34;编织HTML&#34;按钮右侧的小向下箭头,为我提供选项&#34;在窗格中查看&#34;和&#34;在窗口中查看&#34;。选择第一个而不是第二个为我修复它。

答案 2 :(得分:0)

通过修改此处给出的响应可以找到一个很好的综合解决方案: Is it possible to view an HTML table in the viewer pane?或者,为方便起见,我在末尾复制了完整的代码

具体来说,请通过以下三个简单步骤修改print.htmlTable的定义:

(1)如下向函数声明添加标志:

print.htmlTable<- function(x, useViewer = TRUE, as.file.path = FALSE, ...)

(2)在函数定义中,添加以下行:

if(as.file.path){ x <- read_file(x)}

(3)创建包装函数以查看文件:

view.htmlFile <- function(x, ...){
     print.htmlTable(x, useViewer = TRUE, as.file.path = TRUE, ...) 
     }

(4)现在,您可以使用包装器通过文件路径查看HTML文件
(以及用于查看未保存的html输出的原始函数):

 view.htmlFile(filepath.to.html) #i.e. 'knitr-minimal.html' or any other html file

提醒:这是对Max Gordonearlier post中编写的原始功能的调整/修改。相应地给予信用。

print.htmlTable<- function(x, useViewer = TRUE, as.file.path = FALSE, ...){

  if(as.file.path){ x <- read_file(x)}

  # Don't use viewer if knitr package is loaded (assumes if you loaded knitr, you are using knitr and dont want to use Viewer)
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)
      }
    }

#Wrapper to allow viewing of files using path
view.htmlFile <- function(x, ...){
    print.htmlTable(x, useViewer = TRUE, as.file.path = TRUE, ...) 
}

view.htmlFile(filepath.to.html)