2017-01-11 41 views
1

我想爲同一組變量生成許多表。我使用美妙的R包compareGroups和Hmisc來分配變量標籤,這樣我就不必爲每個表更改變量名稱。一些變量名包括乳膠數學模式,但這給了我一個錯誤,因爲compareGroups導出$that$像這樣:\$that\$。這裏是一個最小的例子:使用compareGroups表的Hmisc變量標籤中的乳膠數學模式

# 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) 

有沒有辦法避免在$ by export2latex之前插入\?或者任何解決方法?

+0

恐怕看起來硬編碼到'export2latex.createTable'中。似乎沒有關閉它的選項。 – Benjamin

回答

0

我收到來自compareGroups foru的消息米(link)withan簡單的解決方案。您也可以使用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()