这是我的小例子:
library(data.table)
data<-data.table(x_2dig_id=rnorm(100))
data$x_2dig
我不明白,为什么我没有收到错误(即我的数据中没有列x_2dig)。
如果有人可以详细说明,那将是很好的。
答案 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本身'。