次のdata.frameがあります。
_x <- data.frame(A = c("Y", "Y", "Z", NA),
B = c(NA, TRUE, FALSE, TRUE),
C = c(TRUE, TRUE, NA, FALSE))
_
また、xtabs
を使用して次の表を計算する必要があります。
_A B C
Y 1 2
Z 0 0
<NA> 1 0
_
_na.action = NULL
_ を使用するように言われましたが、実際に必要なテーブルが返されます。
_xtabs(formula = cbind(B, C) ~ A,
data = x,
addNA = TRUE,
na.action = NULL)
A B C
Y 1 2
Z 0 0
<NA> 1 0
_
ただし、_na.action = na.pass
_は別のテーブルを返します。
_xtabs(formula = cbind(B, C) ~ A,
data = x,
addNA = TRUE,
na.action = na.pass)
A B C
Y 2
Z 0
<NA> 1 0
_
しかしxtabs
のドキュメントはこう言っています:
na.action
それがna.passであり、数式が左側にある場合(カウント付き)、カウントにはsum(*)の代わりにsum(*、na.rm = TRUE)が使用されます。
aggregate
を使用すると、_na.action = na.pass
_は期待される結果を返します(また、_na.action = NULL
_も):
_aggregate(formula = cbind(B, C) ~ addNA(A),
data = x,
FUN = sum,
na.rm = TRUE,
na.action = na.pass) # same result with na.action = NULL
addNA(A) B C
1 Y 1 2
2 Z 0 0
3 <NA> 1 0
_
xtabs
で必要なテーブルを取得しましたが、xtabs
内の_na.action
_の動作をドキュメントから理解できません。だから私の質問は:
xtabs
内の_na.action
_の動作はドキュメントと一致していますか?何か不足している場合を除き、_na.action = na.pass
_はsum(*, na.rm = TRUE)
にはなりません。na.action = NULL
_はどこかに記載されていますか?xtabs
ソースコードにはna.rm <- identical(naAct, quote(na.omit)) || identical(naAct, na.omit) || identical(naAct, "na.omit")
があります。しかし、_na.action = na.pass
_および_na.action = NULL
_については何も見ませんでした。 _na.action = na.pass
_および_na.action = NULL
_はどのように機能しますか?今だけ参加してすみません。確かに、xtabs()への最後の半ダースの変更はすべて私が行ったので、私もここで責任を取る必要があります。
すべてのバリアントとxtabs()
の影響を詳しく調べるには、まだ時間がかかっていない時間がかかります(今回はもちろん、もちろん当時もそうでした)。
しかし、あなたはついに答えに値します:
はい、バグがあります-Rコードまたはドキュメントのどちらかにあります(そしてその「または」は包括的です.. ;-)
私の現在の直感は、実装ではなくヘルプ(ファイル)のバグを指している
Rのバグジラは、R Coreチームのチャネルに「関連付けられている」という理由だけでなく、これについて詳しく説明する必要がある場所です。
->フォローアップ: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=1777 。