round()
Sweave / knitrを使用するときに機能を回避する方法はありますか?round(,2)
すべてに書き込むのは本当に面倒\Sexpr{}
です。ドキュメント全体で小数点以下2桁にしたいのですが。
助けてくれてありがとう
Mac
ではknitr
、インラインフックを使用して\Sexpr{}
ステートメントの出力を処理できます。したがって、インラインコードの小数点以下2桁だけを印刷する場合(全体のdigits
オプションはそのままにしておきます)、次のように実行できます。
## First have a look at the default inline hook function
knit_hooks$get("inline")
## Then customize it to your own liking
inline_hook <- function(x) {
if(is.numeric(x)) x <- round(x, 2)
paste(as.character(x), collapse=", ")
}
knit_hooks$set(inline = inline_hook)
まず、ゼロの場合でも2桁を取得するformatC
代わりに使用することをお勧めします。round
Sweaveでこれを行うための優れた方法はありません。おそらく最良のオプションは、必要なフォーマットを行う短い名前で新しい関数を作成することです。何かのようなもの
p <- function(x) {formatC(x, format="f", digits=2)}
これにより、少なくとも入力の手間が少し節約されます。
The answer is $\Sexpr{p(x)}$.
残念ながら、新しいSweaveドライバーをいじくり回さずに、他に何もすることはないと思います(おそらく、これが試してみるもう1つの理由であり、急速に普及してknitr
いるようです)。Sweaveは、ステートメント内の内容に対してこれを実行し、呼び出しを結果 Sexpr
に置き換えます。Sexpr
as.character(eval(parse(text = cmd), envir = .GlobalEnv))
as.character
ただし、 ;の新しいバージョンを作成するだけでは不十分です。名前の間隔が原因で、他の予期しない方法で動作が変わる可能性があるという問題はbase
別として、グローバル環境に別のバージョンがある場合でも、常にバージョンを呼び出します。