gdata:write.fwf使用data.table的问题

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应该做的事情 –
setkey(ans,NULL)出错:
  x可能不再是data.table的字符名称.这种可能性没有记录,已被删除.

有人知道为什么吗?

最佳答案
#5069 gdata ::: write.fwf在参数为data.table时最终出现错误(有时)现在在
v1.8.11中修复.

总结一下这个问题,当从包中的函数(此处为write.fwf)中调用[.data.table时,它会尝试识别包是否为data.table,如果没有(在这种情况下,它不是),它调用等效的[.data.frame方法.在你的情况下,这导致了一个字符向量.并且下一行要求对向量执行setkey操作(将键设置为NULL).

一个简单的解决方法是检查[.data.frame的输出是否仍然是data.table,如果是这样,则将键设置为NULL.

再次感谢您的报道.

点赞