2015-10-28 8 views
10

मैं हमारे लिए कोशिश कर रहा हूँ में तालिका प्रिंट करूं xtable का उपयोग कर तालिका प्रारूप में डेटा फ्रेम मुद्रित करने के लिए knitr:कैसे आप knitr

```{r xtable,fig.width=10, fig.height=8, message=FALSE, results = 'asis', echo=FALSE, warning=FALSE, fig.cap='long caption', fig.scap='short',tidy=FALSE} 

print(xtable(d),format="markdown") 
``` 

इस डेटा फ्रेम d है:

d <- structure(list(Hostname = structure(c(8L, 8L, 9L, 5L, 6L, 7L, 
1L, 2L, 3L, 4L), .Label = c("db01", "db02", "farm01", "farm02", 
"tom01", "tom02", "tom03", "web01", "web03"), class = "factor"), 
    Date = structure(c(6L, 10L, 5L, 3L, 2L, 1L, 8L, 9L, 7L, 4L 
    ), .Label = c("10/5/2015 1:15", "10/5/2015 1:30", "10/5/2015 2:15", 
    "10/5/2015 4:30", "10/5/2015 8:30", "10/5/2015 8:45", "10/6/2015 8:15", 
    "10/6/2015 8:30", "9/11/2015 5:00", "9/11/2015 6:00"), class = "factor"), 
    Cpubusy = c(31L, 20L, 30L, 20L, 18L, 20L, 41L, 21L, 29L, 
    24L), UsedPercentMemory = c(99L, 98L, 95L, 99L, 99L, 99L, 
    99L, 98L, 63L, 99L)), .Names = c("Hostname", "Date", "Cpubusy", 
"UsedPercentMemory"), class = "data.frame", row.names = c(NA, 
-10L)) 

कोई भी विचार क्या मैं यहाँ याद कर रहा हूँ?

+0

मुझे लगता है कि आप प्रयास करने की कोशिश कर रहे थे 'pr int (xtable (डी), प्रकार = "मार्कडाउन") '। जब आप 'प्रारूप' तर्क का उपयोग करते हैं, तो आंशिक मिलान इसे 'format.args' तर्क को असाइन करता है। यदि आपने इसके बजाय 'टाइप' तर्क का उपयोग किया था, तो आपको त्रुटि में बताया गया होगा कि' xtable' केवल HTML और LaTeX आउटपुट का समर्थन करता है। 'Knitr :: kable' का उपयोग करने के लिए पियरे का सुझाव एक अच्छा विकल्प है। – Benjamin

उत्तर

12

knitr से kable आज़माएं। यह तालिका अच्छी तरह से प्रारूपित करेगा।

enter image description here

आप xtable कोशिश उपयोग करने के लिए करना चाहते हैं:

print(xtable(d), type="latex", comment=FALSE) 
+2

यह एक अच्छा +1 है। – akrun

+0

@ पियर्रे लाफोर्ट्यून, मैं इसे इस के साथ काम करने में सक्षम था: प्रिंट (xtable (टी), टाइप = "लेटेक्स"), लेकिन मुझे यह संदेश पीडीएफ फाइल में भी मिलता है:% 3.2x में उत्पन्न% लेटेक्स टेबल xtable 1.7-4 पैकेज% बुध अक्टूबर 28 12:42:49 2015, आप संदेश कैसे नहीं दिखाते? – user1471980

+0

कोड शीर्षलेख में, echo = f और चेतावनी = F –

4

पियरे समाधान काम करता है, यह आदर्श अपने आप ही हो जाना चाहिए। सौभाग्य से, आप इस काम को करने के लिए knitr हुक का उपयोग कर सकते हैं।

यही है, इस कोड को दिए गए:

```{r} 
d 
``` 

हम चाहते हैं knitr स्वचालित रूप से मैन्युअल रूप से एक स्वरूपण समारोह आह्वान करने के लिए बिना, एक ठीक से स्वरूपित तालिका का निर्माण करने के।

यहां कुछ कोड है जिसका मैं उपयोग कर रहा हूं।

opts_chunk$set(render = function (object, ...) { 
    if (pander_supported(object)) 
     pander(object, style = 'rmarkdown') 
    else if (isS4(object)) 
     show(object) 
    else 
     print(object) 
}) 

यह pander का उपयोग करता है और इसके अलावा एक सहायक समारोह की आवश्यकता है, pander_supported:

library(pander) 

pander_supported = function (object) 
    UseMethod('pander_supported') 

pander_supported.default = function (object) 
    any(class(object) %in% sub('^pander\\.', '', methods('pander'))) 

pander.table = function (x, ...) 
    pander(`rownames<-`(rbind(x), NULL), ...) 

आप अपने knitr दस्तावेज़, या कोड में की शुरुआत में इस लगाने की जरूरत है कि अपने दस्तावेज़ संकलन है निकर स्वरूपण के लिए, मैं इन डिफ़ॉल्टों का भी उपयोग करता हूं:

panderOptions('table.split.table', Inf) 
panderOptions('table.alignment.default', 
       function (df) ifelse(sapply(df, is.numeric), 'right', 'left')) 
panderOptions('table.alignment.rownames', 'left')