2013-11-15 11 views
26

कैसे मैं मैन्युअल रूप से और आसानी से है कि अच्छी जब HTML में बदला दिखेगा RMarkdown में एक तालिका स्वरूपित कर सकते हैं में अच्छे लग रहे हैं, पीडीएफ (pandoc और MiKTeX का उपयोग कर (knitr और markdown संकुल का उपयोग)) और डॉक्क्स (पैंडोक का उपयोग कर)?सरल मैनुअल RMarkdown तालिकाओं एचटीएमएल, पीडीएफ और DOCX

मैं RMarkdown में छोटे तालिकाओं कि आर कार्यों कि तीन प्रारूपों मैं सबसे अक्सर इस्तेमाल में अच्छे लग रहे हैं का एक परिणाम नहीं हैं लिखने में सक्षम होना चाहता हूँ। अब तक मुझे एक प्रारूप मिला है जो 3 प्रारूपों में से 2 में अच्छा दिखता है, 3/3 संभव है?

वन। यह बुनाई HTML के बाद अच्छा लगता है लेकिन पीडीएफ या डॉक्स

<table> 
<tr> 
<td>Eggs</td> 
<td>Ham</td> 
</tr> 
<tr> 
<td>Basil</td> 
<td>Tomato</td> 
</tr> 
</table> 

दो में अच्छा नहीं है। यह बुनाई एचटीएमएल के बाद अच्छा दिखता है लेकिन पीडीएफ या डॉक्स

| Tables  | Are   | Cool | 
| ------------- |:-------------:| -----:| 
| col 3 is  | right-aligned | $1600 | 
| col 2 is  | centered  | $12 | 
| zebra stripes | are neat  | $1 | 

तीन में अच्छा नहीं है। यह एक बुनना एचटीएमएल के बाद अच्छा नहीं लगता है लेकिन पीडीएफ और docx (अब तक सबसे अच्छा विकल्प)

V1   Tweedledee  Tweedledum 
-------- -------------- ---------------- 
Age  14    14 
Height  3'2"    3'2" 
Politics Conservative  Conservative 
Religion "New Age"  Syrian Orthodox 
--------- -------------- ---------------- 

चार में अच्छा है। यह बुनाई एचटीएमएल के बाद अच्छा लगता है और पीडीएफ और डॉक्क्स (विजेता!) बनाते हैं, लेकिन मैन्युअल स्वरूपण नहीं है।

filen <- "table" # name of my RMarkdown file without suffix 
knit(paste0(filen,".Rmd")) 

# make PDF 
system(paste0("pandoc -s ", paste0(filen,".md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango -S")) 

# make docx 
system(paste0("pandoc -s ", paste0(filen,".md"), " -o ", paste0(filen,".docx"), " --highlight-style=tango -S")) 
+2

'pander' समाधान के साथ समस्या क्या है? मेरा मतलब है कि आप एक ही टेबल सिंटैक्स को पुन: पेश कर सकते हैं, यह केवल एक ऐसा फ़ंक्शन है जो आर ऑब्जेक्ट्स को पांडोकैक्स [पाइप सिंटैक्स] (http://johnmacfarlane.net/pandoc/README.html#pipe-tables) में अनुवाद करता है। – daroczig

+1

@ डारोज़िज़िग 'पैंडर' आर ऑब्जेक्ट्स से उत्कृष्ट टेबल तैयार करता है, लेकिन मैं यह देखने के लिए देख रहा हूं कि मैं एक उत्कृष्ट वस्तु * बिना * ऑब्जेक्ट प्राप्त कर सकता हूं। उदाहरण के लिए, पाठ की बहुत सरल सारणी। मैं एक रास्ता नहीं देख सकता, इसलिए शायद मेरी सरल तालिका का डेटा फ्रेम बनाना और फिर 'पैंडर' का उपयोग करना सबसे अच्छा विकल्प है। – Ben

+1

मैं देखता हूं, आपकी टिप्पणी के लिए @ बेन धन्यवाद। और निश्चित रूप से आप हाथ से ऐसी टेबल बना सकते हैं (बिना 'पैंडर' के), सिंटैक्स के बारे में ऊपर दिए गए यूआरएल पर मैन्युअल पढ़ें। या बस 'पैंडर (mtcars, style =' rmarkdown ') चलाएं और अंतर देखने के लिए अपने समाधान से तुलना करें। – daroczig

उत्तर

21

daroczig की टिप्पणी से प्रेरित होकर, विशेष रूप से सुराग कि pander pandoc के पाइप वाक्य रचना करने के लिए अनुवाद, मैं को करीब से देख ले लिया:

```{r table1, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'} 
require(pander) 
panderOptions('table.split.table', Inf) 
set.caption("Data on cars") 
pander(mtcars, style = 'rmarkdown') 
``` 

यह कैसे मैं पीडीएफ और docx फ़ाइलों बना रही हूँ है pander दस्तावेज़ीकरण और cat पर संदर्भ मिला।

```{r table2, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'} 
tabl <- " # simple table creation here 
| Tables  | Are   | Cool | 
|---------------|:-------------:|------:| 
| col 3 is  | right-aligned | $1600 | 
| col 2 is  | centered  | $12 | 
| zebra stripes | are neat  | $1 | 
" 
cat(tabl) # output the table in a format good for HTML/PDF/docx conversion 
``` 

यह HTML, PDF और मेरे परीक्षणों में docx में समान रूप से अच्छी लग रही तालिकाओं का उत्पादन: कुछ प्रयोग के बाद, मैं विजेता मिला। अब मैं समाधान के लिए मुझे प्राप्त करने के लिए धन्यवाद देने के लिए कुछ अन्य सवालों पर daroczig upvote करने के लिए बंद हूँ।

आप अपनी तालिका के लिए एक शीर्षक की जरूरत है ... तो आप इसे थोड़ा अलग करने की आवश्यकता होगी। ध्यान दें कि शीर्षक केवल पीडीएफ में दिखाई नहीं देंगे, HTML में नहीं:

```{r table-simple, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'} 
require(pander) 
panderOptions('table.split.table', Inf) 
set.caption("My great data") 
my.data <- " # replace the text below with your table data 
    Tables  | Are   | Cool 
    col 3 is  | right-aligned | $1600 
    col 2 is  | centered  | $12 
    zebra stripes | are neat  | $1" 
df <- read.delim(textConnection(my.data),header=FALSE,sep="|",strip.white=TRUE,stringsAsFactors=FALSE) 
names(df) <- unname(as.list(df[1,])) # put headers on 
df <- df[-1,] # remove first row 
row.names(df)<-NULL 
pander(df, style = 'rmarkdown') 
``` 
+6

मैंने पाया कि आपकी टिप्पणी (यहां # सरल तालिका निर्माण) पैंडोक में हस्तक्षेप करती है। मेरी मशीन पर प्रस्तुत करने के लिए तालिका से पहले लाइन खाली होनी चाहिए। – Wesley

+0

पैकेज 'लेखक' और 'बुकडाउन' के लेखक आर मार्कडाउन से मल्टी-फॉर्मेट आउटपुट के लिए सबसे उपयुक्त समाधान के रूप में 'knitr :: kable' का सुझाव देते हैं, खासकर यदि आप आंतरिक संदर्भ + लिंक के लिए कैप्शन और स्वचालित लेबल वाले टेबल चाहते हैं। [यहां] देखें (https://bookdown.org/yihui/bookdown/tables.html) – FairMiles

संबंधित मुद्दे