2014-12-02 18 views
14

Bu sorunun this one ile benzer olduğunu biliyorum. Ama orada bir çözüm bulamadım, bu yüzden buraya tekrar gönderme.Örme HTML'yi komut satırında nasıl çoğaltılır?

"HTML'yi Biçimlendir" seçeneğini tıklatarak, ancak bir komut ile tam olarak aynı çıktıyı elde etmek istiyorum. , Kable vb çalışmıyor ben knit2html kullanarak tryied ancak biçimlendirme kurcalamayacağından ve başlığı içermez

Örnek: Bu benim test.Rmd dosyası,

--- 
title: "test" 
output: html_document 
--- 

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>. 

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this: 

```{r} 
library(knitr,quietly=T) 
kable(summary(cars)) 
``` 

You can also embed plots, for example: 

```{r, echo=FALSE} 
plot(cars) 
``` 

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot. 

Çıktı

geçerli:

Örme HTML

enter image description here

knit2html

enter image description here

+0

FWIW komut satırı çıktısını tercih ederim. –

+0

@KonradRudolph: Benim için çalışmayacak. Bu sadece koyduğum örnek bir kod. Gerçek kullanım durumumda 8 sütun ve 10 satırlık büyük bir tablo var. Komut çıkışı çirkin görünecek. – Avinash

+1

Bunun nedeni, her iki seçeneğin de (!) Tabloları varsayılan olarak kötü şekilde biçimlendirmesidir. Geliştirilmiş bir seçenek için cevabımı görün. –

cevap

13

documentation söyler:

rmarkdown::render("input.Rmd") 
:

Eğer RStudio kullanmıyorsanız o zaman basitçe örneğin rmarkdown::render fonksiyon çağırmak zorunda

Not: RStudio'daki “Knit” butonu temel mekanizmanın aynısıdır (RStudio, kaputun altındaki rmarkdown::render işlevini çağırır). Bütün farklılıkları bir liste yok olsa Özünde

, rmarkdown::render, knitr::knit2html çok daha fazla ayarları yapar.

Çıktıyı oluşturmanın en esnek yolu, isteğinize göre çıktıyı biçimlendirmek için kendi stil sayfanızı sağlamaktır.

Lütfen komut satırındaile çalışmak için rmarkdown::render'u kullanmanız gerektiğini unutmayın.


dedi ki, burada knitr::knit2hmtl çıktı artıracak iki Açıklamalar vardır ve bence rmarkdown::render kullanarak daha üstün olduklarını:

  • başlık eklemek için, bir Markdown başlığını kullanmak etiketi, bir YAML etiket:

    biçim tabloları için
    # My title 
    
  • , çiğkullanmayınişlevi. Aslında bu, rmarkdown::render kullanırken de geçerlidir: Tablo hücrelerinin hizalaması tamamen kapalıdır. Rmarkdown görünüşte varsayılan hizalama olarak merkezleme kullanır, ancak bu seçenek neredeyse hiç doğru değildir. Bunun yerine, metni ve (genellikle) sağa hizalanmış sayıları sola hizalamanız gerekir.Bu yazı gibi, (bildiğim kadarıyla) Knitr otomatik bunu yapamaz ama senin için bunu yapmanın bir filtre eklemek oldukça kolaydır:

    ```{r echo=FALSE} 
    library(pander) 
    
    # Use this option if you don’t want tables to be split 
    panderOptions('table.split.table', Inf) 
    
    # Auto-adjust the table column alignment depending on data type. 
    alignment = function (...) UseMethod('alignment') 
    alignment.default = function (...) 'left' 
    alignment.integer = function (...) 'right' 
    alignment.numeric = function (...) 'right' 
    
    # Enable automatic table reformatting. 
    opts_chunk$set(render = function (object, ...) { 
        if (is.data.frame(object) || 
         is.matrix(object)) { 
         # Replicate pander’s behaviour concerning row names 
         rn = rownames(object) 
         justify = c(if (is.null(rn) || length(rn) == 0 || 
             (rn == 1 : nrow(object))) NULL else 'left', 
            sapply(object, alignment)) 
         pander(object, style = 'rmarkdown', justify = justify) 
        } 
        else if (isS4(object)) 
         show(object) 
        else 
         print(object) 
    }) 
    ``` 
    
+0

Şimdilik, render işlevini kullanıyorum ve çalışmasını sağladım. Ama ne demek istediğini anladım, bu kötü tasarım. Sütun başına hizalama sağlamak için kable'ın hizalama seçeneğini kullanıyorum. Çözümünüz için bunu ilk kod yığınım olarak koyuyorum ve doğru şekilde ayarlanmalı mıyım? – Avinash

+1

Evet, tam olarak. Elbette kable’ın hizalama seçeneği de prensipte çalışır. Saldırı kullanmamın nedeni genellikle oldukça güçlüdür. –

+2

** pander ** ile daha iyi varsayılan sütun hizalaması için bkz. "PanderOptions ('table.alignment.default')', ör. [Buradan] (http://stackoverflow.com/a/27014481/980833). –

İlgili konular