有没有办法在 R 中创建 LaTex 半矩阵?

时间:2021-01-08 21:00:33

标签: r matrix xtable

我正在尝试使用 xtable 包在 R 中创建打印质量的半矩阵。我可以毫无问题地创建完整的对称矩阵,但是当我只提取下三角矩阵时,出现如下所示的错误。< /p>

library(Matrix)
datamat1<-tril(data1) #extract lower triangle
library(xtable)
options(xtable.floating = FALSE)
options(xtable.timestamp = "")
xtable(datamat1, digits = 3)

我得到的错误是:“没有适用于 'xtable' 的方法应用于类 "c('dtrMatrix', 'ddenseMatrix', 'triangularMatrix', 'dMatrix', 'denseMatrix', 'Matrix' , 'xMatrix', 'mMatrix', 'Mnumeric', 'replValueSp')"

我知道将矩阵转换为半矩阵也会将其类转换为 dtrMatrix 但必须有某种方法以可发布的质量形式导出下三角矩阵。我也尝试过使用 'zoo' 包,但没有任何运气。这是怎么做到的。

1 个答案:

答案 0 :(得分:1)

也许保留原始矩阵并将上三角设置为缺失。然后,您仍将拥有一个 matrix 可以处理的常规 xtable 对象。下面的代码还显示了除了用于打印的 xtable 之外的其他几个选项。 (如果您需要 dtrMatrix 类对象进行进一步处理,您当然可以将其与下面创建的用于打印的对象分开创建。)

---
title: "My Title"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
library(tidyverse)
library(knitr)
library(gt)
library(xtable)
options(xtable.floating = FALSE)
options(xtable.comment = FALSE)
options(knitr.kable.NA="")
```

## Using `xtable`

```{r,  results="asis"}
set.seed(3)
m = matrix(1:16 + rnorm(16), nrow=4)
m[upper.tri(m)] = NA_real_

xtable(m, digits=3)
```

## Using `knitr::kable`

```{r}
colnames(m) = 1:ncol(m)
rownames(m) = 1:nrow(m)

kable(m, row.names=TRUE, digits=3)
```

## Using the `gt` package

```{r}
gt(as_tibble(m),
   rownames_to_stub=TRUE,
   digits) %>% 
  fmt_missing(columns=everything(), 
              missing_text="") %>% 
  fmt_number(columns=everything(), 
             decimals=3)
```

enter image description here