Отпечатайте честотна таблица на фактор с кабел в rmarkdown

Имам фактор в R, който се състои от нивата a, b и c. Данните се състоят от 2 a, едно b и нито едно c. Искам да получа резултат като този (честота на елементите според нивата):

fac <- factor(c("a", "b", "a"), levels=c("a", "b", "c"))
tbl <- table(fac)
tbl

## fac
## a b c 
## 2 1 0

Това трябва да се отпечата с knitr/kable в хубава html таблица:

library(knitr)
kable(tbl)

Но тук идва грешката:

"Error in dn[[2L]] : subscript out of bounds".

Предполагам, че има проблем с dimnames на таблицата:

attributes(tbl)
## $dim
## [1] 3
## 
## $dimnames
## $dimnames$fac
## [1] "a" "b" "c"
## 
## 
## $class
## [1] "table"

Има ли някаква опция за "ремонт" на dimnames за kable? Просто искам да отпечатам тази "проста" таблица - може би съм останал с нещо лесно?

Използването на "таблица" с фактори е описано тук: http://www.stat.berkeley.edu/~s133/factors.html

Четох много за пакета "pander" през последните дни. Ако отпечатам таблицата с pander, тя работи. Защо? Трябва ли просто да премина към pander?

pander(tbl)

person BumbleBee    schedule 23.06.2015    source източник
comment
Аз съм поддържащият pander, така че мнението ми е малко изкривено :) Но pander предлага много повече опции за конвертирайте вашите R таблици в маркдаун, да не говорим за поддръжка за куп S3 класове.   -  person daroczig    schedule 23.06.2015
comment
Ще го пробвам по-късно, изглежда страхотно. Но по-скоро искам да имам възможност да използвам различни пакети. Предполагам, че pander може да направи всичко, което kable може, но не и обратното?   -  person BumbleBee    schedule 24.06.2015
comment
Не съм сигурен какво е предимството да се опитвате да разрешите проблем с един пакет, който вече е разрешен от друг, но съм сигурен, че имате своите мотиви. Относно pander срещу kable: предназначението на тези функции е малко по-различно. kable е да изобразява базови таблици с маркиране/LaTeX/HTML, докато xtable може да изобразява сложни LaTeX таблици, а pander осигурява ~пълна поддръжка за таблици с маркиране.   -  person daroczig    schedule 24.06.2015
comment
Благодаря ви за обширното обяснение тук. Не искам да водя дискусията в грешна посока, но това означава ли, че не може да се използва pander, когато се създава latex/pdf изход? Идеята ми беше документът да е възможно най-гъвкав - дали искам да създам pdf или html в началото няма значение. Имам нужда от фините контроли по-късно, когато създавам хартия или уебсайт. Но въпреки това трябва да се потопя по-дълбоко в тези пакети!   -  person BumbleBee    schedule 25.06.2015
comment
Е, ако имате нужда от гъвкавост, бих се придържал към pander: той осигурява достъп до повечето поддръжка за маркиране (което kable може да пропусне), което може да се конвертира в HTML, PDF, docx или подобни.   -  person daroczig    schedule 25.06.2015


Отговори (1)


Можеш да опиташ

> kable(t(as.matrix(tbl)))
#
#|  a|  b|  c|
#|--:|--:|--:|
#|  2|  1|  0|
person RHertel    schedule 23.06.2015
comment
Форматът table не винаги е много практичен. Поради това често е удобно да се преобразува таблица в матрица или в рамка от данни, ако изходът трябва да бъде обработен допълнително. - person RHertel; 23.06.2015
comment
Благодаря ви, това върши работа! Опитах data.frame, но не работи, така че това вероятно е най-добрият подход. - person BumbleBee; 24.06.2015