私はR Data Analysis Examples: Ordinal Logistic Regressionを序論的ロジスティック回帰(最終的にはrpy2インターフェースを使用したPython)で行うためのガイドとして使用しています。彼らは式を用いて予測推定値のテーブルを作成し、比例オッズ仮定をテストする段階でfun =サマリー関数の引数のR
:私が気づい
(s <- with(dat, summary(as.numeric(apply) ~ pared + public + gpa, fun=sf)))
一つは、fun
であった場合fun =
引数の振る舞いが異なっていたということです上部ケース。理由を調べるには、ここでソースを調べました:summary.R source、ただしFUN =
が見つかりました。
UCLAサイトによると(上記のリンク)、「式の引数を指定してサマリを呼び出すと、式の左側の変数の説明統計が右側のグループで計算されますデフォルトではサマリーは左側の変数の平均を計算しますが、私たちは独自の関数、つまりsfをfun=
引数に指定することで平均の計算をオーバーライドできます。最後のコマンドは、Rに内容をテーブルであるオブジェクトsに返すように要求します。
私はこれが何をしているのか理解していますが、引数fun =
がソースコードのどこにあるのかわかりません(FUN
はデフォルトのようですが、数式の左側に関数sfは無視されています)。このオーバーライドはどこにありますか?そして、これは実際にいくつかの場所を文書化されていますか?もしそうなら、それは明らかにヘルプドキュメントではないからです。私がRのソースを見たのはこれが初めてのことなので、私は無知だと自由に認めます。
私はこれを掘り下げるています理由はrpy2での動作はRでR.、両方fun =
とFUN =
農産物出力のものと一致していないが、rpy2で、唯一FUN =
は出力を生成することです。 fun =
がエラーを投げますRRuntimeError: Error in as.character(substitute(fun)) : cannot coerce type 'closure' to vector of type 'character'
したがって、なぜこれが期待どおりに機能していないのかを知る必要があります。
from rpy2.robjects import pandas2ri
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
pandas2ri.activate()
gms = importr("gms.test")
hmisc = importr('Hmisc')
base = importr('base', robject_translations={'with': '_with'})
stats = importr('stats', robject_translations={'format_perc': '_format_perc'})
r_consult_case_control = pandas2ri.py2ri(consult_case_control)
formula = stats.as_formula('es_score ~ n + raingarden + consult_case')
formula.getenvironment()['es_score'] = r_consult_case_control.rx2('es_score')
formula.getenvironment()['n'] = r_consult_case_control.rx2('n')
formula.getenvironment()['raingarden'] = r_consult_case_control.rx2('raingarden')
formula.getenvironment()['consult_case'] = r_consult_case_control.rx2('consult_case')
# succeeds:
base._with(r_consult_case_control, ro.r.summary(formula, FUN=gms.sf))
# fails with given error:
base._with(consult_case_control, ro.r.summary(formula, fun=gms.sf))
てください:
EDIT
成功と失敗、それぞれPythonのライン(Iは、機能/クロージャ平方フィートを含む、gms.testと呼ばれるRでパッケージを作成しました)このコードのデバッグは私がこの質問で意図したものではないことに注意してください。私はちょうどRのfun
オーバーライドが何をしていたのかを見たいと思っていました。
成功して失敗する* FUN *と* fun * Pythonの両方の行を投稿してください。 – Parfait
上記の編集を完了しましたが、それはこの質問の意図ではありませんでした(これが私がそれを含めなかった理由です)。 'summary'メソッドの' fun'オーバーライドのRコードを知りたいと思いました。私は何が起こっているのか理解しています.Rはクロージャー 'sf'を文字列に強制しようとしています。なぜそれをしようとしているのかは、私が知りたいものです。 –
うーん...あなたのパッケージにアクセスできないから。 'ro.r.summary()'と 'base.summary()'を使って、エラーなしで* FUN *と* fun *の両方に ''平均 ''を使用しました。だから、再現できません。これは 'gm.sf'に関するものでなければなりません。 RまたはPythonの名前の競合を使用している可能性があります。 – Parfait