r x[NA]がxと同じ長さのNAベクトルを生成するのはなぜですか?



r rep (1)

この質問に対する答えには2つの側面があります。

行列のインデックス付け時にNAはどのように解釈されますか?

@alexis_lazが提供するリンクの1つでは、行列のインデックス作成時にTRUEFALSE 、およびNAがどのように解釈されるかについて、非常によく構造化された説明を見つけました。

LogicalインデックスはRどの要素を含めるか除外するかを指示します。

TRUEFALSENA 3つの選択肢があります。

それらは、その位置に表示されているインデックスを含めるべきかどうかを示すのに役立ちます。 言い換えると:

TRUE  == "Include the elment at this index"
FALSE == "Do not include the element at this index"
NA    == "Return NA instead of this index" #  loosely speaking

例えば:

x <- 1:6
x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)]
# [1]  1  3 NA  5

重要な詳細は、分離NA値のデフォルトのストレージモードが論理的であることです( typeof(NA)試してください)。 NA保存モードは、 NA_integer_NA_real_ (doubleの場合)、 NA_complex_またはNA_character_を使用して選択できます。

なぜ5 NAで1だけでなく?

インデックスの長さがベクトルxの長さよりも小さい場合、インデックス付けは、インデックス付けされていないxの値もインデックス付けするために最初からやり直されます。 言い換えれば、 Rは自動的にインデックスを「リサイクル」します。

(...)ただし、標準のリサイクル規則が適用されます。 したがって、前の例で、最後のFALSEを削除すると、インデックスベクトルはリサイクルされ、インデックスの最初の要素はTRUEになり、したがってxの6番目の要素が含まれるようになります。

x <- 1:6
x[c(TRUE, FALSE, TRUE, NA, TRUE)]
#  [1]  1  3 NA  5  6

前のセクションからストレージモードに関する詳細を思い出してください。 x[NA_integer_]と入力すると、違う結果になります。

コードはこんな感じです

x <- 1:5
x[NA]

5個のNAが生成されるのはなぜですか?




r  

r