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.
再次感谢您的报道.