gpt4 book ai didi

r - 在 rmarkdown 和 knitr(PDF 和 HTML)中打印自定义对象

转载 作者:行者123 更新时间:2023-12-04 09:22:17 25 4
gpt4 key购买 nike

假设我有一个带有返回 S3 对象的函数的包:

new_myclass <- function() {
return(structure(list(a=1, b=2), class = "myclass"))
}

我还有两个函数需要 myclass object 并分别返回对象的 HTML 表示和 LaTeX 表示。
myclass2html <- function(obj) { return("<p>MyClass object</p>")}
myclass2latex <- function(obj) { return("\begin{em}MyClass\end{em} object $x$")}

我应该定义哪些函数/方法来提供一致和透明的 knitrrmarkdown支持?我想同时支持 .Rmd文件和 .R带有标题的文件,例如:
#'---
#' title: My document
#' output: pdf_output
#'---

到目前为止,我的方法是通过 knit_print方法:
knit_print.myclass <- function(x, ...) {
rmarkdown_fmt <- rmarkdown::metadata$output
knitr_fmt <- knitr::opts_knit$get("out.format")
# should I use these heuristics with both variables?
if (rmarkdownfmt == "pdf_document") {
return(knitr::asis_output(myclass2latex(x)))
}
if (knitr_fmt %in% c("html", "markdown")) {
return(knitr::asis_output(myclass2html(x)))
} else {
stop("Format not supported!")
}
}

我的主要问题是可能有两个变量 rmarkdown::metadata$outputknitr::opts_knit$get("out.format")可能会或可能不会被定义(取决于是否使用 rmarkdown)。我觉得这很令人困惑。
  • knit_print为此目的进行自定义的正确方法是什么?
  • 知道输出格式的正确方法是什么?有没有get_output_format告诉我输出格式的函数?

  • 为了将问题放在上下文中,我正在处理 condformat允许使用条件格式规则可视化数据帧的包。

    编辑:到目前为止,我一直在做我自己的伏都教来检测输出格式:
    #' @importFrom rmarkdown metadata
    #' @importFrom knitr opts_knit
    guess_output_format <- function() {
    rmd_output <- tryCatch({rmarkdown::metadata$output},
    error = function(e) {NULL})
    if (is.null(rmd_output)) {
    rmd_output = ""
    }
    if (is.list(rmd_output)) {
    rmd_output <- names(rmd_output)[1]
    }
    if (rmd_output == "pdf_document") {
    return("latex")
    } else if (rmd_output %in% c("html_document", "html_vignette")) {
    return("html")
    } else if (rmd_output != "") {
    stop("Unsupported rmarkdown output format:", rmd_output)
    }
    # No rmarkdown, let's try with knitr:
    format <- knitr::opts_knit$get("out.format")
    if (format %in% c("html", "markdown")) {
    return("html")
    } else if (format %in% c("latex")) {
    return("latex")
    } else {
    stop("Format not supported!")
    }
    }

    编辑 :这里进一步讨论: https://github.com/rstudio/rmarkdown/issues/649

    最佳答案

    使用 knitr 1.18,这要简单得多:

    guess_output_format <- function() {
    if (knitr::is_html_output()) {
    return("html")
    } else if (knitr::is_latex_output()) {
    return("latex")
    } else {
    return("unsupported")
    }
    }

    相关问题: https://github.com/rstudio/rmarkdown/issues/649

    关于r - 在 rmarkdown 和 knitr(PDF 和 HTML)中打印自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36044610/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com