4
library(gdata)
library(data.table)


# data.table fails here, data.frame doesn't -------------
df <- data.table(
  a = c('asdfasdf','asdf','asdgasdgasdgasdg','sdg'),
  b = runif(4,0,1)
  )
write.fwf(df,"df.txt")
write.fwf(data.frame(df),"df.txt")


# data.table fails here, data.frame doesn't -------------
df <- data.table(
  a = c('asd','qwe','ert','dfg'),
  b = runif(4,0,1)
)
write.fwf(df,"df.txt")
write.fwf(data.frame(df),"df.txt")


# data.table does not fail here, nor does data.frame ----
df <- data.table(
  a = c(1,5,4,7),
  b = runif(4,0,1)
)
write.fwf(df,"df.txt")
write.fwf(data.frame(df),"df.txt")

data.table を書き出そうとしたときのエラー メッセージは、何write.fwfをすべきかに接続できないものです - Error in setkey(ans, NULL) : x may no longer be the character name of the data.table. The possibility was undocumented and has been removed.

理由を知っている人はいますか?

4

1 に答える 1

2

#5069引数がgdata:::write.fwfdata.table の場合に(時々)エラーになっていた問題は v1.8.11 で修正されました。

問題を要約すると、 がパッケージ[.data.table内の関数 (ここではwrite.fwf) 内から呼び出されると、パッケージが data.table 対応であるかどうかを識別しようとし、そうでない場合 (この場合はそうではありません)、同等の[.data.frameメソッドを呼び出します。そしてあなたの場合、それは文字ベクトルにつながります。次の行setkeyでは、ベクトルに対する操作 (キーを NULL に設定する) が呼び出されました。

簡単な修正は、からの出力[.data.frameがまだ であるかどうかを確認data.tableし、そうである場合はキーを NULL に設定することでした。

ご報告ありがとうございます。

于 2013-11-11T19:04:30.730 に答える