2017-01-11 18 views
1

Я хочу создать несколько таблиц для одного и того же набора переменных. Я использую замечательные группы сравнения R и Hmisc для назначения ярлыков переменных, поэтому мне не нужно менять имена переменных для каждой таблицы. Некоторые имена переменных включают латексный математический режим, но это дает мне ошибку, потому что compareGroups экспортирует $that$ следующим образом: \$that\$. Вот минимальный пример:Математический режим Latex в ярлыках переменной Hmisc с использованием таблицы compareGroups

# 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? Или любое обходное решение?

+0

Я боюсь, что, кажется, зашиты в 'export2latex.createTable'. Кажется, что нет возможности отключить его. – Benjamin

ответ

0

Получено сообщение от compareGroups foru м (link) с простым решением. Кроме того, можно просто заменить «\ $» с «$», используя sub функцию:

tab <- export2latex(tab) 
sub("\\$","$", 
    tab, 
    fixed=TRUE, 
    perl=FALSE) 
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() 
``` 

enter image description here

Если вы хотите, чтобы сделать его прикосновение проще, вы можете расширить метод 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() 

 Смежные вопросы

  • Нет связанных вопросов^_^