1

同じ変数セットに対して多数のテーブルを作成したいと考えています。各テーブルの変数名を変更する必要がないように、素晴らしい R パッケージの compareGroups と Hmisc を使用して変数ラベルを割り当てます。一部の変数名にはラテックス数学モードが含まれていますが、compareGroups は次$that$のようにエクスポートするため、エラーが発生します: \$that\$. 最小限の例を次に示します。

# assigning Hmisc label includinc math mode in $$
library(Hmisc)
label(mtcars$mpg) <- "[$\\frac{miles}{gallon}$]"

# descriptive table of mpg by am
library(compareGroups)

tab <- createTable(
  compareGroups(data = mtcars, 
              am ~ mpg)
  )

# in createTable, the variable name looks fine
tab

# when exported to latex, a \ is inserted before each $
export2latex(tab)

export2latex によって $ の前に \ が挿入されるのを避ける方法はありますか? または回避策はありますか?

4

2 に答える 2

2

を使用pixiedustしてテーブルを生成する回避策を次に示します。 pixiedustを介してセルのコンテンツを「サニタイズ」するオプションがありますHmisc::latexTranslate。デフォルトでは、このオプションはオフになっています。

ソリューションは Rmd ファイルとして提供されます

---
title: "Untitled"
output: pdf_document
header-includes: 
- \usepackage{amssymb} 
- \usepackage{arydshln} 
- \usepackage{caption} 
- \usepackage{graphicx} 
- \usepackage{hhline} 
- \usepackage{longtable} 
- \usepackage{multirow} 
- \usepackage[dvipsnames,table]{xcolor} 
---

```{r, include = FALSE}
library(Hmisc)
library(compareGroups)
library(broom)
library(magrittr)
library(pixiedust)
```

```{r}
label(mtcars$mpg) <- "[$\\frac{miles}{gallon}$]"

# descriptive table of mpg by am
tab <- createTable(
  compareGroups(data = mtcars, 
                gear ~ mpg + qsec)
)

tab_df <- 
  tab$descr %>%
  tidy()

tab_head <- 
  c("", attr(tab, "ylevels"), "p.overall",
    "", sprintf("N=%s", tab$avail[1, -c(1, (ncol(tab$avail) - 0:1))]), "") %>%
  matrix(nrow = 2, 
         byrow = TRUE) %>%
  tidy %>%
  setNames(names(tab_df))

dust(tab_df,
     float = FALSE) %>%
  redust(tab_head, part = "head") %>%
  medley_bw()
```

ここに画像の説明を入力

もう少し簡単にしたい場合は、メソッドを拡張してdustメソッドを含めることができますdust.createTable(これは原始的であり、すべてのユースケースを考えたわけではありませんが、たとえば)

dust.createTable <- function(object, ...){
  obj_df <- 
    object$descr %>%
    broom::tidy()

  obj_head <- 
    c("", attr(object, "ylevels"), "p.overall",
      "", sprintf("N=%s", object$avail[1, -c(1, (ncol(object$avail) - 0:1))]), "") %>%
    matrix(nrow = 2, 
           byrow = TRUE) %>%
    broom::tidy() %>%
    stats::setNames(names(obj_df))

  pixiedust::dust(obj_df) %>%
    pixiedust::redust(obj_head, part = "head")
}


compareGroups(data = mtcars,
            gear ~ mpg + qsec) %>%
  createTable() %>%
  dust()

compareGroups(data = mtcars,
              gear ~ mpg + qsec + wt) %>%
  createTable() %>%
  dust()
于 2017-01-11T12:15:28.993 に答える
0

compareGroups フォーラム (リンク) から簡単な解決策を示すメッセージを受け取りました。sub関数を使用して、「\$」を「$」に​​置き換えることもできます。

tab <- export2latex(tab)
sub("\\$","$", 
    tab, 
    fixed=TRUE, 
    perl=FALSE)
于 2017-01-12T12:42:35.550 に答える