1

私はRでかなり基本的なものを持っており、data.table25万行90列です。data.tableクラスの列の1つにキーを設定しようとしていますcharacter。私が電話するとき:

setkey(my.dt,my.column)

次の不可解なエラーメッセージが表示されます。

"Error in setkeyv(x, cols, verbose=verbose) :
reorder received irregular lengthed list"

このメッセージでソースコードのコミットを見つけましたが、それが何を意味するのかを完全に解読することはできません。私のキー列にはNAまたは空白の値が含まれておらず、見るのが完全に合理的であり(株式相場表示が含まれている)、デフォルトのorder()コマンドで適切に動作します。

さらに苛立たしいことに、次のコードは正しく完了します。

first.dt <- my.dt[1:100000]
setkey(first.dt,my.column)
second.dt <- my.dt[100001:nrow(my.dt]
setkey(second.dt,my.column)

ここで何が起こっているのかわかりません。任意のヒント?

編集1:キーのすべての値がかなり標準的な形式に適合することを確認しました:

> length(grep("[A-Z]{3,4}\\.[A-Z]{2}",my.dt$my.column)) == nrow(my.dt)
[1] TRUE

編集2:私のシステム情報は以下のとおりです(実際にはWindows 7を使用していることに注意してください)。data.tableバージョン1.8を使用しています。

> Sys.info()
          sysname           release           version          nodename           machine             login 
        "Windows" "Server 2008 x64"      "build 7600" "WIN-9RH28AH0CKG"          "x86-64"   "Administrator" 
             user    effective_user 
  "Administrator"   "Administrator" 
4

1 に答える 1

1

実行してください:

sapply(my.dt, length)

1つ以上の列の長さが最初の列と異なると思われますが、これは無効data.tableです。あなたの.Internal(inspect(my.dt))(ありがとう)がそれらを示して、彼らが大丈夫なので、それは最初の5つの1つではありません。

もしそうなら、v1.8.1にこのバグ修正があります:

o不規則なlist()を含むDTのrbind()は、リストアイテムを正しくリサイクルするようになりました(#2003)。テストが追加されました。

不規則な長さで一緒rbind()に作成する前の時点である可能性はありますか?そうでない場合は、を実行しているコードをステップ実行して、無効な長さの列が作成されている場所を確認してください。それで武装して、回避策を講じることができ、潜在的なバグを修正することもできます。ありがとう。my.dtlistsapply(my.dt,length)

編集 :

元の不可解なエラーメッセージは、v1.8.1で次のように改善されました。

DT = list(a=6:1,b=4:1)
setattr(DT,"class",c("data.table","data.frame"))
setkey(DT,a)

Error in setkeyv(x, cols, verbose = verbose) : 
  Column 2 is length 4 which differs from length of column 1 (6). Invalid
  data.table. Check NEWS link at top of ?data.table for latest bug fixes. If
  not already reported and fixed, please report to datatable-help.

注意:を作成するこの方法data.tableは、無効なを作成する可能性があるため、お勧めしませんdata.table。私がここで行っているように、listが定期的であり、本当に速度が必要である(つまり、速度のためにチェックを避けたいas.data.table()data.table()か、無効であることを示す必要がある場合を除きdata.tableます。

于 2012-06-13T18:47:16.133 に答える