Создание латексной таблицы из объекта ftable в R - PullRequest
9 голосов
/ 11 марта 2012

Позвольте мне создать некоторые данные, прежде чем я задам свой вопрос.

 my.data <- data.frame(A = sample(seq(1,100,by=5),10,replace=TRUE),W = rnorm(10),X =sample(1:10),Y = sample(c("yes", "no"), 10, replace = TRUE),Z=sample(c('a','b','c','d'),10,replace=TRUE))

attach(my.data)

my.d <- xtabs(W~Z+Y+A);my.d
table.data <- ftable(my.d)

result1 <- round(table.data,2)

result1 выглядит как ..

      A     6    11    16    26    71    76    86    91
Z Y                                                    
a no     0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00
 yes    0.00  0.56  0.00  0.00  0.00  0.79  0.00  0.01

b no     0.61  0.00 -0.22  0.14  0.00  0.00 -0.08  1.71
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

c no     0.00  0.00  0.00  0.00 -0.08  0.00  0.00  0.00
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

d no     0.00  0.00  0.00  0.00  1.00  0.00  0.00  0.00
  yes    0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

На самом деле я пишу статью, используя пакет knitr. Есть ли способ преобразовать результат1 в латексную таблицу автоматически, когда мой * .rnw файл соответствует?

Я пытался с xtable, но получил следующую ошибку ...

Error in UseMethod("xtable") :   no applicable method for 'xtable' applied to an object of class "ftable"

Спасибо @DWin и @Yihui. Помимо latex (), я также использовал xtable, как указано в

print(xtable(ftable2data.frame(result1)))

Чтобы удалить ненужные имена строк, я сделал следующее

print(xtable(ftable2data.frame(result1)),include.rownames=FALSE)

Ответы [ 5 ]

6 голосов
/ 04 июля 2013

В качестве альтернативы memisc предоставляет методы toLatex для объектов ftable.

library(memisc)
toLatex(result1)
4 голосов
/ 30 апреля 2014

Вы можете использовать пакет xtable:

library(xtable)
mytable=ftable(mydata)
print(
  xtable(format(mytable)),file="~/Desktop/mytable.tex"
)

Я не знаю, как это соотносится с другими вариантами.

4 голосов
/ 12 марта 2012

Метод 1:

require(MIfuns)
require(Hmisc)
latex(ftable2data.frame(result1))
1 голос
/ 14 ноября 2016

Построение ответа пользователя 2030503,

# install.packages('simsalapar')
library(simsalapar)
utils::toLatex(result1)

Функция toLatex является универсальной S3, поэтому передается в simsalapar:::toLatex.ftable() при получении объекта ftable. В качестве альтернативы вы можете просто сделать simsalapar:::toLatex.ftable(result1).

Как только это было сделано, мне нужно было включить \usepackage{booktabs} в латексную преамбулу, поскольку toLatex.ftable использует \toprule. В качестве альтернативы вы можете передать booktabs=FALSE.

Также похоже, что toLatex.ftable обрезает конечные нули. Чтобы исправить это, я так и сделал (см. Ответ на Форматирование десятичных знаков в R для format()):

result1[1:nrow(result1),1:ncol(result1)] %<>% as.numeric %>% format(nsmall=2,digits=3)

это преобразует матрицу таблицы в матрицу символов, но toLatex.ftable все еще работает.

Я также нашел полезным \usepackage{pdflscape} и обернуть мою таблицу \begin{landscape} и \end{landscape}, потому что эти таблицы сопряженности могут быть довольно широкими.

0 голосов
/ 01 октября 2015

Используйте функцию toLatex(), предоставляемую пакетом simsalapar .

library(simsalapar)
toLatex(result1)
...