4

これはバグかもしれないと思います。もしそうなら、私は報告します。確認を探しています:

> is.null(data.table(NULL))
  [1] FALSE

FAQに次のように表示されます。

2.5 NULLdata.tableはDT[0]と同じですか?いいえ、印刷方法が別のことを示しているにもかかわらず。厳密に言えば、is.null(data.table(NULL))がFALSEを返すようにすることはできません。このFAQは、将来再検討される可能性があります。

これが意図された動作である場合:オブジェクトがnullであるかどうかをどのようにチェックしますか?特に、rbindlistNULLオブジェクトの場合は、NULL data.tableどのようにチェックするのでしょうか。

> is.null(rbindlist(NULL))
  [1] FALSE
4

2 に答える 2

5

FAQ がそのように表現されている理由がわかりません。ただし、null データ テーブルは単なる空のリストです。

> data.table:::null.data.table
function () 
{
    ans = list()
    setattr(ans, "class", c("data.table", "data.frame"))
    setattr(ans, "row.names", .set_row_names(0L))
    settruelength(ans, 0L)
    alloc.col(ans)
}

そうではありませんNULL。から?list:

空のペアリスト、pairlist() は NULL と同じです。これは list() とは異なります。

長さが 0 ( length(DT) == 0) かどうかを確認することで確認できます。これは、data.table:::print.data.table「NULL data.table」または「Empty data table (0 rows) ...」のどちらを出力するかを決定するものです。

于 2013-03-10T12:15:35.720 に答える
4

いい視点ね。の出力を変更しましたdata.table(NULL)。v1.8.9 の NEWS より:

FAQ 2.5 は次のようになります。

FAQ 2.5 null の data.table は DT[0] と同じですか?
いいえ。「null data.table」とは、data.table(NULL)またはの結果を意味しas.data.table(NULL)ます。つまり、

> data.table(NULL)
Null data.table (0 rows and 0 cols)
> as.data.table(NULL)
Null data.table (0 rows and 0 cols)
> data.frame(NULL)
data frame with 0 columns and 0 rows
> as.data.frame(NULL)
data frame with 0 columns and 0 rows

nulldata.table|frameにはNULLいくつかの属性が付加されているため、それはもうありませ NULLん。R では、ピュアのみNULLNULLによってテストされていis.null()ます。「null data.table」を参照する場合、大文字の NULL と区別しやすいように小文字の null を使用します。null の data.table をテストするには、 length(DT)==0or ncol(DT)==0(lengthプリミティブ関数であるため、少し高速です) を使用します。空の data.table ( DT[0]) には 1 つ以上の列があり、そのすべてが空です。これらの空の列にはまだ名前と型があります:

> DT = data.table(a=1:3,b=c(4,5,6),d=c(7L,8L,9L))
> DT[0]
Empty data.table (0 rows) of 3 cols: a,b,d
> sapply(DT[0],class) 
        a         b         d 
"integer" "numeric" "integer"
于 2013-03-11T10:08:53.533 に答える