Использование латексной команды R Hmisc summary / summaryM в Knitr Markdown pdf - PullRequest
0 голосов
/ 15 апреля 2019

Я пытался заставить примеры Hmisc latex.summary и latex.summaryM работать в PDF-документе, созданном с использованием Knitr в RStudio. Но продолжайте получать сообщения об ошибках. Пример данных:

options(digits=3)
set.seed(173)
sex <- factor(sample(c("m","f"), 500, rep=TRUE))
country <- factor(sample(c('US', 'Canada'), 500, rep=TRUE))
age <- rnorm(500, 50, 5)
sbp <- rnorm(500, 120, 12)
label(sbp) <- 'Systolic BP'
units(sbp) <- "mmHg"
treatment <- factor(sample(c("Drug","Placebo"), 500, rep=TRUE))
sbp[1] <- NA


# Generate a 3-choice variable; each of 3 variables has 5 possible levels
symp <- c('Headache','Stomach Ache','Hangnail',
          'Muscle Ache','Depressed')
symptom1 <- sample(symp, 500,TRUE)
symptom2 <- sample(symp, 500,TRUE)
symptom3 <- sample(symp, 500,TRUE)
Symptoms <- mChoice(symptom1, symptom2, symptom3, label='Primary Symptoms')

И я хочу создать PDF-документ, содержащий таблицы

tab1 <- summary(sex ~ treatment + Symptoms, fun=table)
tab2 <- summaryM(age + sex + sbp + Symptoms ~ treatment,
          groups='treatment', test=TRUE)

Я использую версию R 3.5.2 (2018-12-20), RStudio 1.1.463, Hmisc_4.2-0 и установил tinytex с использованием tinytex::install_tinytex().

После нескольких часов проб и ошибок я обнаружил, как это сделать, и публикую приведенный ниже код на случай, если он поможет другим.

1 Ответ

1 голос
/ 15 апреля 2019

У меня работает следующий код, заметка;

Требование к латексной упаковке relsize, когда атрибут Hmisc::units используется для предотвращения следующей ошибки failed to compile.

! Undefined control sequence.
<recently read> \smaller

Функция mylatex взята из https://stackoverflow.com/a/31443576/4241780, и требуется для удаления нежелательных выходных данных.

Опция file = "" необходима для предотвращения ошибки

Error in system(comd, intern = TRUE, wait = TRUE) : 'yap' not found 
Calls: <Anonymous> ... print -> print.latex -> show.latex -> show.dvi -> system

Использование опции where = "!htbp" гарантирует, что таблицы остаются там, где они расположены, и не перемещаются в верхнюю часть страницы (по умолчанию where = "!tbp") https://tex.stackexchange.com/a/2282.

---
title: "Untitled"
author: "Author"
date: "15 April 2019"
output: 
  pdf_document: 
     extra_dependencies: ["relsize"]
---

```{r setup, include=FALSE}

library(Hmisc)
library(dplyr)

mylatex <- function (...) {
    o <- capture.output(latex(file = "", where = "!htbp", ...))
    # this will strip /all/ line-only comments; or if you're only
    #  interested in stripping the first such comment you could
    #  adjust accordingly
    o <- grep('^%', o, inv=T, value=T)
    cat(o, sep='\n')
}

```

```{r data}

# As in question above ...

```

Here is the first table

```{r tab1, results = "asis"}

tab1 <- summary(sex ~ treatment + Symptoms, fun=table)

mylatex(tab1)

```

Here is the second table

```{r tab2, results = "asis"}

tab2 <- summaryM(age + sex + sbp + Symptoms ~ treatment, test=TRUE)

mylatex(tab2)

```
...