2017-05-31 38 views
1

有沒有一種方法可以傳遞xtable的標識函數來清理列名和另一個自定義函數來粗體顯示列名?下面有兩個代碼塊,一個用於設置虛擬函數,然後是另一個用於打印xtable。它在第一列名稱中的$符號上失敗,並且表值中的$符號被正確清理。用xtable在knitr中對粗體和標識的列名進行淨化處理

謝謝!

<<setup>>= 
library(knitr) 
library(xtable) 
two_functions = function(x){ 
    paste("\\textbf{", x, "}", sep = "") 
    # use xtable's 'identity' function to convert special characters 
} 

options(xtable.sanitize.colnames.function = two_functions) 
@ 

<<xtable, results='asis'>>= 
xtab = data.frame(a = c("Horse and $buddy", "Paddy Wagon", "Hospital Care", "Peanut butter and toast", "Cheese Whiz with Mayo"), 
        b = c(10000000, 200000.4533, 3098765435.65456, 408765467.654456, 50.00000)) 
colnames(xtab) = c("Hello money $ bag$", "Numbers") 
print(xtable(xtab)) 
@ 
+0

你能否提供你正在運行到錯誤的詳細信息?你如何編織文檔,通過RStudio中的按鈕?顯式地從控制檯?當我運行代碼時,我不會遇到任何錯誤,並且結果如預期。 – Peter

+0

@Peter該代碼不提供錯誤,但列標題中的$符號不顯示給我。它將Latex表格列標題置於數學模式。我想要一個函數在列標題上運行默認的「標識」清理功能,並使列標題變爲粗體。希望澄清...? – Prevost

+0

@Peter並回答前面的問題(對不起)我正在用knitr,pdflatex編織,使用RStudio – Prevost

回答

0

我認爲解決的辦法也許作爲two_functions調用中使用gsub一樣簡單。

\documentclass{article} 
\begin{document} 
<<<setup>>= 
library(knitr) 
library(xtable) 

two_functions = function(x){ 
    gsub("\\$", "\\\\$", paste("\\textbf{", x, "}", sep = "")) 
} 

options(xtable.sanitize.colnames.function = two_functions, 
     xtable.sanitize.rownames.function = NULL, 
     xtable.sanitize.text.function  = NULL) 

@ 

<<xtable, results='asis'>>= 
xtab = data.frame(a = c("Horse and $buddy", "Paddy Wagon", "Hospital Care", "Peanut butter and toast", "Cheese Whiz with Mayo"), 
        b = c(10000000, 200000.4533, 3098765435.65456, 408765467.654456, 50.00000)) 
colnames(xtab) = c("Hello money $ bag$", "Numbers") 
print(xtable(xtab)) 
@ 
\end{document} 

enter image description here

編輯

要使用默認xtable功能用於消毒的字符串替換爲以下內容上面的two_functions功能:

two_functions = function(x){ 
    paste0("\\textbf{", xtable::sanitize(x, type = "latex"), "}") 
} 

這裏xtable::sanitize函數首先調用然後將產生的蜇傷放入乳膠內環境。

生成的表是:

enter image description here

+0

@ Peter Nice上的編譯按鈕。是的,我同意這是一個用於替換$符號的工作函數,但默認的清理函數覆蓋的不僅僅是$字符。所以理想的功能將結合淨化(包括不僅僅是$字符)功能和粗體功能。 – Prevost

+0

@Prevost,我編輯了我的答案。在'two_functions'調用中使用'xtable :: sanatize'應該可以做到。 – Peter

+0

我認爲就是這樣!當我回到我的電腦時,我會嘗試一下,如果它適用於我,我會標記你的答案是正確的。再次感謝.... – Prevost

相關問題