2017-05-31 10 views
1

xtableの識別関数を渡してカラム名をサニタイズする方法と、カラム名を太字にする別のカスタム関数がありますか?下には、ダミー関数を設定するコードチャンクと、xtableを表示する別のコードチャンクがあります。最初の列名の$記号で失敗し、表の値の$記号が適切に消毒されます。ボールドとニットのxtableを使用したアイデンティティのサニタイズ

ありがとうございます!

<<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そのコードではエラーは発生しませんが、列見出しの$記号は私には表示されません。これは、ラテックステーブルの列見出しを数式モードにします。私は、カラムヘッダーを太字にするだけでなく、カラムヘッダーにデフォルトの 'identity' sanitize関数の両方を実行する関数を望みます。希望を明確にする...? – Prevost

+0

@Peter前の質問に答えるには(申し訳ありません)、私はknstr、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

編集

以下で上記two_functions機能を置き換える文字列を消毒するために、デフォルトxtable機能を使用するには:ここで

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

xtable::sanitize関数が最初に呼び出されます得られた刺し傷はLaTeXの内側に置かれる環境。

結果のテーブルには、次のとおりです。

enter image description here

+0

@ Peter Niceアバター。はい、それは$シンボルを置き換える働きのある関数ですが、デフォルトのサニタイズ関数は$文字以外のシンボルもカバーしています。したがって理想的な関数は、サニタイズ($文字以外の関数を含む)関数と太字関数の両方を組み合わせることになります。 – Prevost

+0

@Prevost、私は私の答えを編集しました。 'two_functions'コールの中で' xtable :: sanatize'を使うことはそのトリックを行うべきです。 – Peter

+0

私はそうだと思います!私は自分のコンピュータで戻ってきたときに試してみると、それが私のために働くなら、私はあなたの答えを正しく記入します。再度、感謝します.... – Prevost

関連する問題