我使用的是带有R版本3.3.2(2016-10-31)的data.table的(可能已过时的)版本1.10.4。我可以使用美元符号访问不存在的列。这种行为是否需要?
代码:
realOffloads = data.table(BAG_TAG = c(1,2,3))
realOffloads = realOffloads[, .(BAG_TAG, OFFLOAD_REAL = T)]
"OFFLOAD" %in% names(realOffloads)
x = realOffloads$OFFLOAD
虽然我得到'FALSE'作为对'OFFLOAD'列是否存在的问题的回答我在使用美元符号访问它时会得到一些东西(T,T,T)。
我在代码中经常使用它,所以现在我有点害怕: - ()
此致 FW
答案 0 :(得分:0)
来自基础R文档:
[[
和$
都会选择列表中的单个元素。主要区别 是$
不允许计算索引,而[[
则允许。{1}}。x$name
是 相当于x[["name", exact = FALSE]]
。另外,部分匹配 可以使用确切的参数来控制[[
的行为。
data.table
是data.frame
,而data.frame
是list
,因此data.table
是list
。因此允许与$
进行不精确的匹配。这对于您尝试快速浏览数据的交互式会话非常有用,但对于非交互式代码来说却不太好,因为在发生意外情况时这些代码可能会爆炸。
这就是为什么如果您不能100%确定列存在,那么使用$
进行子集化几乎总是一个坏主意。即便如此,它也可能成为拼写错误的牺牲品。而不是DT$name
,请使用DT[["name"]]
。这不会引发错误,但会返回NULL
,这很容易检查。即使你放手,NULL
可能会导致错误。