【问题标题】:Why does data.table, setting "with" = F, output a data.table when j is a single column?为什么data.table,设置“with”=F,j为单列时输出data.table?
【发布时间】:2015-03-12 16:18:25
【问题描述】:

假设我有数据表 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] 中的行为有何不同?

【问题讨论】:

标签: r data.table


【解决方案1】:

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

【讨论】:

  • 好的,但这并不能解释为什么我们在dt[,V1] 中没有这种行为。
  • @JeanPaul 答案是——为了方便。通常最好返回一个向量,而不是从返回的data.table 中提取它。通过在这种情况下允许返回向量,我们允许用户根据需要为每种情况返回列或表(即dt[ , V1]dt[ , .(V1)]
猜你喜欢
  • 2020-02-15
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2019-04-05
相关资源
最近更新 更多