Programowo tworzenie tabel Markdown w R za pomocą KnitR
Dopiero zaczynam się uczyć o KnitR i wykorzystaniu Markdown w generowaniu dokumentów R i raportów. To wygląda na idealne dla wielu codziennych raportów, które mam do czynienia z moją pracą. Nie widzę jednak łatwego sposobu drukowania ramek danych i tabel przy użyciu formatowania Markdown (coś w stylu xtable
, ale z Markdown zamiast LaTeX lub HTML). Wiem, że mogę po prostu osadzić wyjście HTML z xtable, ale zastanawiałem się, czy są jakieś Markdown oparte na rozwiązania?
7 answers
Teraz knitr
(od wersji 1.3) pakiet zawiera funkcję kable
do tworzenia tabel:
> library(knitr)
> kable(head(iris[,1:3]), format = "markdown")
| Sepal.Length| Sepal.Width| Petal.Length|
|-------------:|------------:|-------------:|
| 5,1| 3,5| 1,4|
| 4,9| 3,0| 1,4|
| 4,7| 3,2| 1,3|
| 4,6| 3,1| 1,5|
| 5,0| 3,6| 1,4|
| 5,4| 3,9| 1,7|
Zaktualizowano: Jeśli masz raw markdown w dokumencie spróbuj setup results = "asis"
chunk option.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-03 19:24:18
Dwa pakiety, które to zrobią to pander
library(devtools)
install_github('pander', 'Rapporter')
Lub ascii
pander
jest nieco inne podejście do budowy raportu, (ale może być przydatne dla tej funkcji).
ascii
pozwala na print
z type = 'pandoc
(lub różne inne smaki markdown)
library(ascii)
print(ascii(head(iris[,1:3])), type = 'pandoc')
**Sepal.Length** **Sepal.Width** **Petal.Length**
--- ------------------ ----------------- ------------------
1 5.10 3.50 1.40
2 4.90 3.00 1.40
3 4.70 3.20 1.30
4 4.60 3.10 1.50
5 5.00 3.60 1.40
6 5.40 3.90 1.70
--- ------------------ ----------------- ------------------
Zauważ, że w obu tych przypadkach jest to skierowane do użycia pandoc
do konwersji z markdown na żądany typ dokumentu, jednak użycie style='rmarkdown'
spowoduje utworzenie tabel, które są kompatybilne z tym pakietem markdown
i wbudowaną konwersją w rstudio
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 22:26:51
Chciałem tylko zaktualizować to, co postanowiłem zrobić. Używam teraz pakietu hwriter
do drukowania tabel, i używam funkcji row.*
i col.*
do umieszczania klas CSS na różnych elementach. Następnie napisałem Niestandardowy CSS, aby mój wyświetlacz był taki, jaki chciałem. Oto przykład na wypadek, gdyby ktoś inny miał do czynienia z czymś podobnym.
Najpierw Utwórz plik, który wykona knitting
i zmień znacznik na HTML:
FILE: file_knit.r
#!/usr/bin/env Rscript
library(knitr)
library(markdown)
knit("file.Rmd")
markdownToHTML("file.md","file.html",stylesheet="~/custom.css")
Następnie utwórz rzeczywisty Markdown plik:
FILE: file.Rmd
Report of Fruit vs. Animal Choices
==================================
This is a report of fruit vs. animal choices.
```{r echo=FALSE,results='asis'}
library(hwriter)
set.seed(9850104)
my.df <- data.frame(Var1=sample(x=c("Apple","Orange","Banana"),size=40,replace=TRUE),
Var2=sample(x=c("Dog","Cat","Bunny"),size=40,replace=TRUE))
tbl1 <- table(my.df$Var1,my.df$Var2)
tbl1 <- cbind(tbl1,rowSums(tbl1))
tbl1 <- rbind(tbl1,colSums(tbl1))
colnames(tbl1)[4] <- "TOTAL"
rownames(tbl1)[4] <- "TOTAL"
# Because I used results='asis' for this chunk, I can just use cat() and hwrite() to
# write out the table in HTML. Using hwrite()'s row.* function, I can assign classes
# to the various table elements.
cat(hwrite(tbl1,
border=NA,
table.class="t1",
row.class=list(c("header col_first","header col","header col","header col", "header col_last"),
c("col_first","col","col","col","col_last"),
c("col_first","col","col","col","col_last"),
c("col_first","col","col","col","col_last"),
c("footer col_first","footer col","footer col","footer col","footer col_last"))))
```
Na koniec utwórz własny plik CSS.
FILE: custom.css
body {
font-family: sans-serif;
background-color: white;
font-size: 12px;
margin: 20px;
}
h1 {font-size:1.5em;}
table {
border: solid;
border-color: black;
border-width: 2px;
border-collapse: collapse;
margin-bottom: 20px;
text-align: center;
padding: 0px;
}
.t1 .header {
color: white;
background-color: black;
border-bottom: solid;
border-color: black;
border-width: 2px;
font-weight: bold;
}
.t1 .footer {
border-top: solid;
border-color: black;
border-width: 2px;
}
.t1 .col_first {
border-right: solid;
border-color: black;
border-width: 2px;
text-align: left;
font-weight: bold;
width: 75px;
}
.t1 .col {
width: 50px;
}
.t1 .col_last {
width: 50px;
border-left: solid;
border-color: black;
border-width: 2px;
}
Wykonanie ./file_knit.r
daje mi plik.html, który wygląda tak:
Więc, mam nadzieję, że może to być pomocne dla innych, którzy chcą trochę więcej formatowania w wyjściu Markdown!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-22 14:20:39
W pakiecie pander
znajdują się funkcje:
> library(pander)
> pandoc.table(head(iris)[, 1:3])
-------------------------------------------
Sepal.Length Sepal.Width Petal.Length
-------------- ------------- --------------
5.1 3.5 1.4
4.9 3 1.4
4.7 3.2 1.3
4.6 3.1 1.5
5 3.6 1.4
5.4 3.9 1.7
-------------------------------------------
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-18 22:45:27
Nie jest bardzo trudno stworzyć własną, spersonalizowaną funkcję. Oto bardzo prosty dowód koncepcji generowania tabeli rmarkdown data.frame
:
rmarkdownTable <- function(df){
cat(paste(names(df), collapse = "|"))
cat("\n")
cat(paste(rep("-", ncol(df)), collapse = "|"))
cat("\n")
for(i in 1:nrow(df)){
cat(paste(df[i,], collapse = "|"))
cat("\n")
}
invisible(NULL)
}
W .Dokument Rmd, który następnie użyjesz funkcji results = 'asis'
:
```{r, results = 'asis'}
rmarkdownTable <- function(df){
cat(paste(names(df), collapse = "|"))
cat("\n")
cat(paste(rep("-", ncol(df)), collapse = "|"))
cat("\n")
for(i in 1:nrow(df)){
cat(paste(df[i,], collapse = "|"))
cat("\n")
}
invisible(NULL)
}
rmarkdownTable(head(iris))
```
Powyższy kod da ci następujący rysunek (w przykładzie jest to wyjście pdf, ale ponieważ tabela jest w markdwon, możesz również wkleić w html lub word).
Stąd-i czytając Kodeks innych narodów - można dowiedzieć się, jak manipuluj tekstem, aby wygenerować żądaną tabelę i tworzyć bardziej spersonalizowane funkcje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-22 21:57:53
Użyj kombinacji knitr:: kable i xtable w dokumencie markdown.
library("knitr","xtable")
Dla prostych danych.frame -
kable(head(mtcars[,1:4]),format="markdown")
kable(head(mtcars[,1:4]),format="pandoc",caption="Title of the table")
format="pandoc"
umożliwia więcej opcji, takich jak podpis.
Teraz kombinacja dla podsumowania modelu.
data(tli)
fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli)
kable(xtable(fm1), caption = "Annova table")
Aby uzyskać jeszcze więcej opcji, spójrz na stargazer
Pakiet zamiast xtable
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 00:03:07
Aby pisać / tworzyć tabele Markdown w R, Możesz również użyć MarkdownReports' MarkDown_Table_writer_DF_RowColNames()
LUB MarkDown_Table_writer_NamedVector()
funkcji. Po prostu przekazujesz ramkę danych / macierz z nazwami wymiarów lub wektor z nazwami, a ona przetwarza i zapisuje tabelę w formacie Markdown.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-28 14:51:38