确定脚本是否在RStudio笔记本中运行

时间:2016-12-17 10:30:40

标签: r rstudio knitr r-markdown

在我的htmlTable包中,我一直在使用base::interactive来确定输出是应该输出为字符串还是输出到浏览器窗口(这里是{{3} }})。不幸的是,interactive()code内运行时返回TRUE,在笔记本中确定执行环境的等效方法是什么?

我已尝试ls()search(),但无论环境如何,它们看起来都相同。我还拥有由RStudio notebook文档调用的knit_print.htmlTable S3函数,但它似乎无法在笔记本环境中正确检测到它。

1 个答案:

答案 0 :(得分:0)

所以我到目前为止找到的最佳解决方案是使用RStudio API实现上下文检测器:

prIsNotebook <- function() {
  if (!rstudioapi::isAvailable()) {
    return(FALSE)
  }

  ctxt <- rstudioapi::getActiveDocumentContext()
  if (grepl("\\.Rmd$", ctxt$path)) {
    return(TRUE)
  }

  # Look for html_notebook within the header if the file hasn't been saved
  contents <- ctxt$contents
  header <- grep("^---$", contents)
  if (length(header) == 2) {
    return(any(grepl("html_notebook$",
                     contents[min(header) : max(header)])))
  }

  return(FALSE)
}

我不会将此作为答案来检查,因为这更像是一个黑客而非真正的解决方案。