7

私はSweave用のRのプログラミングに少し問題があり、#rstatsのTwitterグループがここを頻繁に指摘しているので、この質問をSOの群衆に向けると思いました。私はプログラマーではなくアナリストなので、最初の投稿は簡単に行ってください。

問題は次のとおりです。SweavewithRで調査レポートを作成しており、を使用して限界収益を報告したいと思います\Sexpr{}。たとえば、次のように言うのではなく、

回答者のわずか14%が「X」と答えました。

私はこのようなレポートを書きたいです:

回答者の\Sexpr{p.mean(variable)} $ \%$のみが「X」と答えました。

問題は、Sweaveが式の結果を\Sexpr{}文字列に変換することです。つまり、Rの式からの出力と、私のドキュメントに表示される出力が異なります。たとえば、上記では関数'p.mean'を使用しています。

p.mean<- function (x) {options(digits=1)  
mmm<-weighted.mean(x, weight=weight, na.rm=T)  
print(100*mmm)  
}

Rでは、出力は次のようになります。

p.mean(variable)
>14

しかし、を使用する\Sexpr{p.mean(variable)}と、ドキュメントに丸められていない文字列(この場合は13.5857142857143)が含まれます。digits=1関数の出力を、グローバル環境、関数自体、およびさまざまなコマンドに制限しようとしました。これには、Rが出力するものだけが含まれているようであり、式の結果であり、最終的にLaTeXファイルに出力される文字変換は含まれていません。

as.character(p.mean(variable))  
>[1] 14  
>[1] "13.5857142857143"  

R関数を再プログラミングするか、Sweaveまたはの設定を使用して、LaTeXファイルに出力される桁を制限するために私ができることを誰かが知っていますか\Sexpr{}

4

5 に答える 5

4

@KennyTMはそれを手に入れました。@David、すべての計算に影響するため、避ける必要options(digits = 1)があります(後で各出力の小数が抑制されます)。したがってround()、 を適用した後に関数を使用しますweighted.mean()。このようなもの:

\Sexpr{round(p.mean(x))}

そして、使用しないでください。理由は次のとおりです。print()return()

> set.seed(1234)
> x <- rnorm(100)
> foo <- function(x) {
   res <- mean(x) + 5
   print(res)
}
> foo(x)
[1] 5
> foo(x) + 10
[1] 5
[1] 15

結果の変数を使用するreturn()か、最後の行に入力します。

> bar <- function(x) {
   res <- mean(x) + 5
   return(res)
}
> bar(x) + 10
[1] 15

したがって、関数を書き直して、必ず使用してas.character()ください...すべてのビットが揃ったので、すべてをまとめてください。

PS

関数がどのように機能するかわかりません...分析で加重平均を使用したことはありません。私を最も困惑させているビットはweight=weight. 関数にもう 1 つ引数を追加した方がよいのではないでしょうか? 率直に言って、私はあなたの関数が正しい結果を与えているという事実にまだ驚いています...おそらく、weight関数定義の前に変数が定義されているためです。[編集]関数が事前定義されていない場合、関数で加重平均を取得することはできませんが、weight通常の」平均です!

これがお役に立てば幸いです!

よろしく、 アレクサンダル

于 2010-03-21T08:11:37.320 に答える
3

「フォーマット」を試してください:

options(digits=1)

その後:

\Sexpr{format(p.mean(variable))}

'nsmall' 引数を使用することもできます。

options(digits=3)
...
\Sexpr{format(sqrt(2)-0.41,nsmall=2)}

また、C に精通している場合は、'sprintf' を試すこともできます。

于 2010-03-21T07:03:12.577 に答える
2
as.character(round(p.mean(variable)))

?

于 2010-03-21T06:14:03.273 に答える
1

sprintf() 関数は、数値出力の書式設定に最適です。

于 2010-03-25T00:10:06.847 に答える