Data.table: rbindlist(...、fill = TRUE)はリスト列にNA_logical_を返す必要がありますか?

作成日 2020年01月25日  ·  6コメント  ·  ソース: Rdatatable/data.table

#4196から:

リスト列を埋めるとき、rbindlistは他のすべての列タイプの動作から逸脱し、NAの代わりにNULL要素を返します。

> A = data.table(c1=0, c2=list(1:3))
> B = data.table(c1=1)
> rbind(A,B,fill=TRUE)
      c1     c2
   <num> <list>
1:     0  1,2,3
2:     1   

期待:

> A = data.table(c1=0, c2=list(1:3))
> B = data.table(c1=1)
> rbind(A,B,fill=TRUE)
      c1     c2
   <num> <list>
1:     0  1,2,3
2:     1  NA   

リスト列のこの動作を変更して、他の列タイプのfill = TRUEの動作と一致するように、行をNA値で埋める必要がありますか?

non-atomic column question

最も参考になるコメント

代わりに、リスト列が欠落している場合の動作を示す文をドキュメントに追加するとどうなりますか。

fill引数の現在のエントリ:

TRUEは、欠落している列をNAで埋めます。 デフォルトではFALSEです。 TRUEの場合、use.namesはTRUEに設定されます。

提案:

TRUEは、欠落している列をNAで埋め、欠落しているリスト列の場合はNULLを埋めます。 デフォルトではFALSEです。 TRUEの場合、use.namesはTRUEに設定されます。

全てのコメント6件

変更を加える場合は、修正を加えたPR

現在の動作は私には問題ないようです。

> str(as.integer(NULL)[1L])
 int NA
> str(as.list(NULL)[1L])
List of 1
 $ : NULL

IMO 次の理由で NA であってはなりません。

  • タイプを欠落フィールド (未定義) から論理ベクトルに変更します。
  • 長さを0から長さ1に変更します

私はヤンのポイントに傾いています。 空の要素の現在の動作は、実際には欠落していることを表すリストの方法です(指すオブジェクトはありません)。 リストの各項目が論理ベクトルであり、各項目が何らかの計算の結果である例を作成できます。 このような場合、3つの異なる状態を表す必要があります。長さ0論理、長さ1 NA論理、および欠落した計算です。 長さ1のNA論理が欠落のために使用された場合、それらの2つは区別できませんでした。

印刷方法を変更するだけで十分ですか? 何も印刷されない代わりに、 NULLどうですか? NA印刷すると、長さ1 NAの論理を意味する可能性がありますが、 NULLは明確であり、ベースRが空のリストアイテムに対して印刷するものと一致し、リストであることをさらに視覚的に思い出させます。カラム。

特に長さ0->長さ1についてもwJanに同意します。

lengths(x)>0 をたくさん使用して、空のリスト列で行をフィルタリングしています。

代わりにlogical()をそこに置くと推測できますが、NULLよりもlogical()の利点はありますか?

代わりに、リスト列が欠落している場合の動作を示す文をドキュメントに追加するとどうなりますか。

fill引数の現在のエントリ:

TRUEは、欠落している列をNAで埋めます。 デフォルトではFALSEです。 TRUEの場合、use.namesはTRUEに設定されます。

提案:

TRUEは、欠落している列をNAで埋め、欠落しているリスト列の場合はNULLを埋めます。 デフォルトではFALSEです。 TRUEの場合、use.namesはTRUEに設定されます。

ドキュメントの変更は良さそうです。 さらに、私が提案した印刷方法の変更も?

このページは役に立ちましたか?
0 / 5 - 0 評価