web-dev-qa-db-ja.com

Rでのxtabと集計の間のna.actionの不整合

次の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_はどのように機能しますか?
5
Thomas

今だけ参加してすみません。確かに、xtabs()への最後の半ダースの変更はすべて私が行ったので、私もここで責任を取る必要があります。

すべてのバリアントとxtabs()の影響を詳しく調べるには、まだ時間がかかっていない時間がかかります(今回はもちろん、もちろん当時もそうでした)。

しかし、あなたはついに答えに値します:

  • はい、バグがあります-Rコードまたはドキュメントのどちらかにあります(そしてその「または」は包括的です.. ;-)

  • 私の現在の直感は、実装ではなくヘルプ(ファイル)のバグを指している

  • Rのバグジラは、R Coreチームのチャネルに「関連付けられている」という理由だけでなく、これについて詳しく説明する必要がある場所です。

  • ->フォローアップ: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=1777

0
Martin Mächler