为什么data.table,设置"with" = F,当j为单列时输出一个data.table?

Why does data.table, setting "with" = F, output a data.table when j is a single column?

假设我有数据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]

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

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