为什么到处都必须对数据.table使用`[[1]]`?

问题描述

用变量名索引DT列后,数据以类型data.table data.frame返回,并且该列不是可访问的向量,因此我必须首先将其取消列出。我在按预期做一切吗?
考虑以下示例:

require(data.table)
DT <- data.table(a=seq(1.001,10.999,length=100),b=factor(c(rep('a',55),rep('b',45))))
col.name <- 'a'
diff(DT[,col.name]) #column name not found error
diff(DT[,col.name,with=FALSE]) #null data table
diff(DT[,with=FALSE][[1]]) #works

第二个例子是关于什么问题。

解决方法

您有许多选择来检索单列。我认为,最可读的方法是使用.SD,尽管不是最快的方法。通常也希望不要将单列data.table转换为向量。

require(data.table)
DT <- data.table(a=seq(1.001,10.999,length=100),b=factor(c(rep('a',55),rep('b',45))))

DT[,get(col.name) ] # vector
DT[[ col.name ]] # vecotr
DT[,col.name,with = FALSE ] # data.table
DT[,.SD,.SDcols = col.name ] # data.table
,

在给定输入的情况下,两种(直接)获取矢量而不是data.table的方法:

DT[,get(col.name)]
DT[[col.name]] # as per comment by ismirsehregal 

还有一些像DT[,with=FALSE][[1]]一样令人费解的

with(DT,eval(parse(text=col.name)))
DT[,..col.name][[1]] # as per comment by ismirsehregal 

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...