gpt4 book ai didi

r - Knitr:Markdown文档中LaTeX环境中的R代码

转载 作者:行者123 更新时间:2023-12-04 03:51:58 25 4
gpt4 key购买 nike

我在Markdown中有一个文档,该文档通过Knitr合并了R代码。为了渲染方程式,我使用LaTeX,只需在文本中编写其命令即可。说我有以下LaTeX代码:

\begin{displaymath}
\mathbf{X} = \begin{bmatrix}
2 & 12\\
3 & 17\\
5 & 10\\
7 & 18\\
9 & 13\\
\end{bmatrix}
\end{displaymath}

当我将所有内容转换为PDF时,这为我提供了很好的数学矩阵表示形式(方括号中)(完整的工作流程为:RMD-> knitr-> MD-> pandoc-> TeX-> pandoc-> PDF)。

现在,假设我们要从R对象(某些R矩阵 x)动态生成所述矩阵。在 this post中,我们确定如何生成所需的LaTeX代码(在那里定义了 matrix2latex()函数)。现在的问题是如何获取 Knitr对其进行评估。我尝试了以下代码:
\begin{displaymath}
\mathbf{X} = `r matrix2latex(x)`
\end{displaymath}

但它只是在R输出应产生的地方产生空白(实际上为NULL)。令我感到惊讶的是,这还没有被问到(至少我自己的搜索没有产生任何结果)。任何想法如何使这项工作?

编辑:

如建议的那样,重写不带 cat()的函数。这是该函数的工作版本,以供将来引用:
m2l <- function(matr) {

printmrow <- function(x) {

ret <- paste(paste(x,collapse = " & "),"\\\\")
sprintf(ret)
}

out <- apply(matr,1,printmrow)
out2 <- paste("\\begin{bmatrix}",paste(out,collapse=' '),"\\end{bmatrix}")
return(out2)
}

最佳答案

这是因为matrix2latex函数使用cat并将其输出发送到标准输出流,而knitr不在此位置输出输出。

两种解决方案:一种是使用pastesprintf或其他字符串格式函数重写您的函数以将输出构造为字符串,或者作为一种快速破解方法,只需将其包装在capture.output中即可:

m2l = function(matr){capture.output(matrix2latex(matr))}

然后在 .Rmd文件中:
\begin{displaymath}
\mathbf{X} = `r m2l(x)`
\end{displaymath}

变成
\mathbf{X} = \begin{bmatrix} , 0.06099 & 0.768 \\ , 0.6112 & 0.004696 \\ , 0.02729 & 0.6198 \\ , 0.8498 & 0.3308 \\ , 0.6869 & 0.103 \\ , \end{bmatrix}

虽然不是很完美,但确实说明了原理。内联表达式插入的代码是它的值,而不是它打印或显示的内容。

关于r - Knitr:Markdown文档中LaTeX环境中的R代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20759444/

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