将 R 矩阵像 `m<-rbind(c("x/(z+1)","x^2/(z+1)"),c("y/(z+1)","y^2/(z+1)"))` 转换成 table 到 .文件

Convert R matrix like `m<-rbind(c("x/(z+1)","x^2/(z+1)"),c("y/(z+1)","y^2/(z+1)"))` to table it to .doc

我想在 R Markdown 中插入像 m<-rbind(c("x/(z+1)","x^2/(z+1)"),c("y/(z+1)","y^2/(z+1)")) 这样的 R 矩阵作为 table,而不是将其编织到 .doc。
我希望它采用简洁的形式,以便所有单元格都用线条分隔,并且所有公式都能正确显示。 我想从我拥有的矩阵中自动完成。
我正在考虑将矩阵中的千个公式作为包含变量和算术运算的任何公式的简单示例。
首先,我尝试使用更简单的表达式 m<-rbind(c("x","x^2"),c("y","y^2")) 没有结果。

TeXForm(m)

library(Ryacas)
Sym(m)
TeXForm(m)

我得到了:

"$x$";

熊猫(男)[=6​​7=]

我得到了:

-------
 A   B 
--- ---
 x  x^2 

 y  y^2
-------

单元格中的公式显示不正确。

knitr::kable(m)

我得到了:

|A  |B   |
|:--|:---|
|x  |x^2 |
|y  |y^2 |

它没有在 .doc 中正确显示。

xtable(m)

我得到了我无法在 .doc 中编写的 LaTeX 代码。但是当以 pdf 格式编织时,单元格中的公式显示不正确。我也试过print(xtable(m),type="html")
我无法将它编织成 .doc,但在 html 文档中它给出的结果与以前类似。

用LaTeX代码替换矩阵的每个元素

Apymtx<-function(m,f){m1<-m 
for (k in 1:nrow(m)){ for (l in 1:ncol(m)){m1[k,l]<-f(m[k,l])}}
return(m1)}
m<-Apymtx(m, TeXForm)

我得到了:

[,1]               [,2]                
[1,] "( TeXForm( x ) )" "( TeXForm( x^2 ) )"
[2,] "( TeXForm( y ) )" "( TeXForm( y^2 ) )"

然后我尝试将 TeXForm(m[1,1]) 的 'class' 更改为 'character' 但没有结果。

如何在 R Markdown 中使用公式归档 table,并将其编织成 .doc?

您错过了 pandoc 解释 Tex formulas between the dollar signs。例如:

> pander(data.frame(
+   A = c("$x^2$", "$\frac{x}{y}$"),
+   B = c("$\sum_{1}^{n}foobar_i$",
+         "$\cos (2\theta) = \cos^2 \theta - \sin^2 \theta$")))

--------------------------------------
      A                  B            
------------- ------------------------
    $x^2$      $\sum_{1}^{n}foobar_i$ 

$\frac{x}{y}$ $\cos (2\theta) = \cos^2
              \theta - \sin^2 \theta$ 
--------------------------------------

docx 中呈现良好:


编辑:根据问题更新让我更清楚你想通过 Ryacas 将数学公式转换为 TeX,请参阅此方法这样做。不幸的是,我无法在 yacas 中使用 retclass="unquote" 参数,这就是丑陋的字符串操作的原因:

> pander(apply(m, c(1, 2), function(x) gsub('\"|;| ', '', yacas(TeXForm(x))$YacasForm)))

--------------- -------------------
$\frac{x}{z+1}$ $\frac{x^{2}}{z+1}$

$\frac{y}{z+1}$ $\frac{y^{2}}{z+1}$
--------------- -------------------

调用后的 MS Word 输出 pander:

这是基于标记为正确的答案的另一种解决方案。

library(Ryacas)
library(pander)
m<-rbind(c("x","x^2"),c("y","y^2"))
Apycs<-function(m){
library(Ryacas)
m1<-m 
for (k in 1:nrow(m)){ for (l in 1:ncol(m)){
m.2<-yacas(TeXForm(m[k,l]))[[2]]
m1[k,l]<-substr(m.2,2,nchar(m.2)-2)}}
return(m1)}
m<-Apycs(m)
pander(m)