r प्रोग्रामिंग के साथ आर में एनआईटीआर के साथ मार्कडाउन टेबल बनाना




markdown knitr (6)

मैं सिर्फ एनआईटीआर और आर दस्तावेजों और रिपोर्टों को उत्पन्न करने में मार्कडाउन के उपयोग के बारे में जानना शुरू कर रहा हूं। यह दिन-प्रतिदिन रिपोर्टिंग के लिए बिल्कुल सही लगता है कि मुझे अपने काम के साथ करना है। हालांकि, एक चीज जो मैं नहीं देख रहा हूं वह xtable स्वरूपण (जैसे xtable की तरह, लेकिन लाटेक्स या एचटीएमएल के बजाय xtable साथ) का उपयोग करके डेटा फ्रेम और तालिकाओं को मुद्रित करने का एक आसान तरीका है। मुझे पता है कि मैं सिर्फ HTML आउटपुट को xtable से एम्बेड कर सकता हूं, लेकिन मैं सोच रहा था कि क्या मार्कडाउन-आधारित समाधान थे?


अपना खुद का अनुकूलित फ़ंक्शन बनाना बहुत मुश्किल नहीं है। डेटा.फ्रेम की रैमडाउन तालिका उत्पन्न करने के लिए अवधारणा का एक बहुत ही सरल सबूत यहां दिया गया है:

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

आरएमडी दस्तावेज़ में आप फ़ंक्शन का उपयोग 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))
```

उपर्युक्त कोड आपको निम्न चित्र देगा (उदाहरण में यह पीडीएफ आउटपुट है, लेकिन चूंकि तालिका मार्कडॉन में है, इसलिए आप HTML या शब्द में भी बुनाई कर सकते हैं)।

यहां से - और अन्य लोगों के कोड को पढ़ने - आप यह समझ सकते हैं कि टेक्स्ट को आप जिस तालिका में चाहते हैं उसे उत्पन्न करने के लिए और अधिक वैयक्तिकृत फ़ंक्शंस बनाने के लिए कैसे छेड़छाड़ कर सकते हैं।


अब knitr (संस्करण 1.3 के बाद) पैकेज में एक निर्माण टेबल के लिए kable समारोह शामिल हैं:

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

अपडेट किया गया : यदि आपको किसी दस्तावेज़ में कच्चे मार्कडाउन मिलते हैं तो सेटअप results = "asis" खंड विकल्प आज़माएं।


अपने मार्कडाउन दस्तावेज़ में knitr :: kable और xtable के संयोजन का उपयोग करें।

library("knitr","xtable")

एक साधारण डेटा के लिए। फ्रेम -

kable(head(mtcars[,1:4]),format="markdown")
kable(head(mtcars[,1:4]),format="pandoc",caption="Title of the table")

format="pandoc" कैप्शन जैसे अधिक विकल्प की अनुमति देता है।

अब मॉडल सारांश के लिए संयोजन।

data(tli)
fm1 <- aov(tlimth ~ sex + ethnicty + grade + disadvg, data=tli)
kable(xtable(fm1), caption = "Annova table")

और भी विकल्प के लिए xtable बजाय stargazer पैकेज को xtable

व्यक्तिगत उपयोग के लिए उदाहरण


बस मैं जो करना चाहता हूं उसके साथ इसे अपडेट करना चाहता था। मैं अभी टेबल को मुद्रित करने के लिए, और row.* का उपयोग करने के लिए hwriter पैकेज का उपयोग कर रहा हूं row.* और col.* सीएसएस कक्षाओं को विभिन्न तत्वों पर रखने के लिए विशेषताएं। फिर, मैंने अपना प्रदर्शन करने के लिए कस्टम सीएसएस लिखा क्योंकि मैं इसे चाहता था। तो, यहां कोई उदाहरण है यदि कोई और इसी तरह से कुछ कर रहा है।

सबसे पहले, एक फ़ाइल बनाएं जो knitting और मार्कडाउन को HTML में बदलें:

FILE: file_knit.r
#!/usr/bin/env Rscript

library(knitr)
library(markdown)

knit("file.Rmd")
markdownToHTML("file.md","file.html",stylesheet="~/custom.css")

इसके बाद, वास्तविक मार्कडाउन फ़ाइल बनाएं:

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"))))
```

अंत में, बस एक कस्टम सीएसएस फ़ाइल बनाएँ।

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;
}

निष्पादन ./file_knit.r मुझे ./file_knit.r देता है, जो इस तरह दिखता है:

तो, उम्मीद है कि यह उन लोगों के लिए सहायक हो सकता है जो मार्कडाउन आउटपुट में थोड़ा अधिक स्वरूपण चाहते हैं!


pander पैकेज में कार्य हैं:

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

आर में MarkDown_Table_writer_DF_RowColNames() टेबल लिखने / बनाने के लिए, आप MarkdownReports' MarkDown_Table_writer_DF_RowColNames() या MarkDown_Table_writer_NamedVector() फ़ंक्शंस का भी उपयोग कर सकते हैं। आप आयाम नामों या नाम वाले वेक्टर के साथ डेटा फ्रेम / मैट्रिक्स पर बस जाते हैं, और यह मार्कडाउन प्रारूप में तालिका को पार और लिखता है।





r-markdown