在data.table中选择不存在的列

时间:2017-05-09 17:28:48

标签: r data.table

这是我的小例子:

library(data.table)
data<-data.table(x_2dig_id=rnorm(100))
data$x_2dig

我不明白,为什么我没有收到错误(即我的数据中没有列x_2dig)。

如果有人可以详细说明,那将是很好的。

3 个答案:

答案 0 :(得分:2)

这也发生在列表中,这是R中最基本的数据结构类型之一。$是一个速记运算符,其中x $ y等于x [[“y”,exact = FALSE]]。它通常用于访问数据框中的变量。

如果您想收到部分匹配的警告,则可以执行以下操作:

options(warnPartialMatchDollar = TRUE)

来自R文件:

?`[[`
  

x [[i,exact = TRUE]]

     

精确控制[[提取时]的可能部分匹配   字符向量(对于大多数对象,但请参阅“环境”)。该   默认不是部分匹配。值NA允许部分匹配但是   发生时发出警告。值FALSE允许部分匹配   没有任何警告。

  

两者[[和$选择列表中的单个元素。主要区别   是$ $不允许计算指数,而[[做。 x $名字是   相当于x [[“name”,exact = FALSE]]。另外,部分匹配   行为[[可以使用确切的参数控制。

这也在Hadley Wickham的子集化章节的高级R书中有所解释。你可以找到它here

答案 1 :(得分:0)

这可以追溯到过去R过度帮助并试图猜测你的意思的旧时代。数据框(构建数据表)具有此功能,而tibbles(data_frame)故意将其保留以防止您遇到的问题!哈德利有时会在谈话中谈到这一点。

答案 2 :(得分:0)

因为data.table知道您已获得该列的唯一标识符。下面的示例表明,一旦它不是唯一的,它就会失败。

data<-data.table(x_2dig_id=rnorm(100),x_2dig_id2=rnorm(100))
data$x_2dig

NULL

编辑:Per Joy,这可能是R的东西,而不是data.table本身'。