2012-06-01 32 views
9

我以前問過一個關於how to export a HTML table in R and have control over line borders的問題。如何使用R Markdown或HTML Sweave生成HTML表格和伴隨的CSS?

我習慣了LaTeX,當你創建一個表格時,表格的格式很大程度上取決於在該點出現的文本和標記。這適用於Sweave,因爲您的R代碼塊可以在那時輸出LaTeX表格標記。我也明白,有像xtable這樣的工具可以爲表格生成HTML標記。

但是,對HTML表格的控制似乎依賴於樣式表,這意味着出現在文檔的標題中,而不是放在R代碼塊的位置。當然,我可以將內容放入樣式表中,但在科學應用程序中,通常會有一些非常具體的表格格式,這些格式在某些方面會從表格到表格之間有所不同。

因此,我的問題:

  • 在一般情況下,如果輸出的格式需要輸出,如R降價文學編程,甚至從原始的HTML,你如何格式化HTML表在一個單獨的地方創建在R代碼塊所在的文檔中(即表頭中的表的CSS)(即表格本身在主體中)?
+0

通過給表一個類,並具有類特定的CSS。如果此解決方案不能解決問題,請添加反抽樣。 –

+0

@Dieter我意識到這是一個解決方案。我的問題是,如何從R代碼塊中將類特定的css獲取到R Markdown或HTML Sweave文檔中的標題中?我對你如何做到這一點很感興趣,並且更關心如何以優雅和直接的方式做到這一點。 –

+0

a)快速和骯髒:與貓。 b)認真工作:使用沖泡模板。 –

回答

5

我能想到的三種方式,而不使用工具鏈搞亂,他們都是那種哈克。

  1. 只在身體右側輸出<style>。這在技術上並非有效,但在任何主流瀏覽器中都可以正常工作。

  2. 發出JavaScript,它會在運行時創建<style>塊,並將其附加到頭部(單向here's)。這在HTML源代碼和R代碼中看起來有點粗糙,但它會起作用並且會被驗證。

  3. 使用scoped style block。這正是你正在尋找的東西,除了scope屬性是HTML5的新功能,並且尚未在任何主要瀏覽器中實現。但是,如果你將你的樣式建立在唯一生成的ID上(即你的規則是這樣編寫的,即使它們適用於整個文檔也不會搞亂任何東西),我想瀏覽器會忽略「scoped」屬性和所有內容將正常工作 - 然後這成爲有效驗證的選項1的一個版本!

(我將與3號去,親自)

如果您還沒有準備好,這將會是值得入手,在關於這個RStudio支持論壇線程;即使它不是一個嚴格的RStudio問題,但我們顯然在R Markdown中發佈報告的端到端場景方面做了大量工作,並希望詳細瞭解您的具體示例。表格顯然將成爲人們用這個報告做的很大一部分,我們知道這是現在的一個弱點,我們希望在未來版本中解決這個問題。

+0

嗨,喬,很高興看到RStudio如何快速創新。你給了我一些很好的選擇來探索。 –

1

好的,希望我現在明白了。你應該設置一些額外的knitr選項,如果你願意,你可以動態地cat()css。

<!DOCTYPE html> 
<head> 
<style type="text/css"> 
.greenback { 
    background-color: teal; 
    color: white; 
} 
.greenback td { 
    border: dotted gray; 
} 
.bluescreen { 
    background-color: blue; 
    color: white; 
} 
.bluescreen td { 
    border: thick solid; 
    padding:2px; 
    margin:2px; 
} 

</style> 
</head> 

<body> 
<table class="greenback"> 
<tr><td>Hello</td><td>Mars</td><tr> 
<tr><td>World</td><td>Moon</td><tr> 
</table> 

Could use some xtable code here instead. 

<!--begin.rcode 
cat(' 
<table class="bluescreen"> 
<tr><td>Hello</td><td>Mars</td><tr> 
<tr><td>World</td><td>Moon</td><tr> 
</table> 
') 
    end.rcode--> 

</body> 
</html> 
+0

+1謝謝你。我想我正在尋找一種方法在體內包含樣式信息,以便R函數可以將樣式信息和表格文本寫入R Markdown文檔中。 gvisTable似乎使用腳本做了一些這個。 –

2

的另一種方法是使用pander爲R降價後端(對不起,這種營銷類的答案,但我認爲我的Pandoc.brew功能可能是用於此目的非常方便)。

它類似於knitr(解析/ evaling中的R減價格式的文件命令),但使用對R代碼塊brew語法(例如<%...%>一般R代碼裏面 - 樣環等,並且<%=...%>用於在塊返回結果) 。但不同於brew,因爲Pandoc.brew不僅僅是cat導致代碼塊,而是運行我的pander通用方法,它將R對象轉換爲(恕我直言)漂亮的Pandoc標記格式。

所以在降價格式的文件,運行Pandoc.brew會導致與所有的R代碼塊乾淨的降價文件中運行 - 你不必應付xtable和其他調整(即使不是陰謀,最後一次在所有的R代碼塊圖像被渲染爲png文件並在降價文本文件中鏈接)。

關於爲什麼我開始在這裏回答:與pander你可以通過特殊選項pandoc,例如,將自定義CSS樣式表(或JS等)添加到您生成的HTML標題中,詳細信息請參見Pandoc's homepage。基於此,您可以輕鬆添加CSS文件或甚至只是一堆樣式參數。這可以在panderPandoc.convertoption完成。順便說一句,你甚至不必使用我的分叉brew函數,,你可以生成你的降價文件,例如, knitr並用上述函數調用Pandoc。

pander增加了一些CSS/JS到生成的HTML文件,這將產生(恕我直言)相當漂亮的輸出,但你可以很容易地定製,並在那裏添加自己的文件。

例如:你會得到this HTML file基於this markdown默認情況下這是Pandoc.brew編輯從這個相當markdown syntax brew file。 BTW my github page也是由我的降價解析器生成/自動設計的。我真的很感激,如果你想嘗試它:)


注意:試試你需要Pandoc預裝,還你需要一個了最新版本的上述電話均爲rapport,均爲pander。請參閱installation details。不徹底解決問題

2

一種選擇是使用gvisTable

這是一個基本的gvisTable:

```{r message=FALSE} 
# install.packages("googleVis") 
library(googleVis) 
library(MASS) 
data(Animals) 
``` 

```{r results='asis'} 
tab1 <- gvisTable(Animals, 
        options = list(width = 600, height = 650, 
            page = "enable", 
            pageSize = nrow(Animals))) 
print(tab1, "chart") 
``` 
  • ?print.gvis介紹了一些選項用於打印gvis對象。
  • 在部分情況下,R Markdown文檔需要tag="chart"選項,因爲這意味着輸出只是對象所需的內容,而不是默認的完整HTML頁面。
  • output of this and a little more here
+0

嘗試這樣一個例子時,LaTeX不再工作。 –

1

尼爾桑德斯有一個教程customising CSS for HTML generated using RStudio。它顯示瞭如何修改內置的樣式文件並獲取這個替代文件。

+0

這似乎很好,但我不明白如何做文件'custom.css'。我們在哪裏必須包括'markdown.css'文件的修改? –

+0

通過閱讀教程,您聽起來像(a)在工作目錄中創建一個新的css文件,(b)使用'markdownToHTML'函數中的'stylesheet'參數和css文件名的值。 –

+0

是的,但教程說我們必須修改'markdown.css'文件。它顯示了這些修改,但我知道在哪裏包含這些修改。在文件的開頭?最後 ?這些修改的語言看起來不像'markdown.css'文件的語言,因此我甚至不明白他們爲什麼稱爲修改。 –