为什么data.table,设置“with”= F,当j是单列时输出data.table?

时间:2015-03-12 16:18:26

标签: r data.table

假设我有数据表dt。

dt = as.data.table(c(0,1,2,3))

我想知道为什么dt的行为在以下两行代码中有所不同。

dt[,V1]

dt[,"V1",with=F]

具体来说,第一行产生数字向量,而第二行产生data.table。

我想构建一个函数,允许我通过传递字符串(因此使用= F)动态检索单个列,并在某些其他函数中使用该输出。就像现在一样,后一种情况下的行为可能会导致某些函数出错,例如ecdf和hist,它们不接受data.frame或data.table。

这是我做过的解决方法。

as.data.frame(dt[,"V1",with=F])[,1]

这会返回预期的输出:一个与ecdf和hist很好地匹配的向量。这有点乱。 dt[,"V1",with=F]中的行为与dt[,V1]的行为有何不同?

1 个答案:

答案 0 :(得分:3)

根据data.table FAQ,许多data.frame用户在没有设置drop=FALSE的情况下从data.frame返回单个列时遇到了错误。这些用户期望单列data.frame输出而不是向量。当with=FALSE符合这些用户的期望时,data.table的默认行为。