我根据@akrun (谢谢!)的评论编辑了这个问题,意识到我没有准确地问我的问题。
我不明白为什么下面的内容不返回数据表中最后一列的内容。
> dt <- data.table(A=c(10,10,10),B=c(20,20,20),C=c(30,30,30))
> dt[,ncol(dt)]
[1] 3
如果我使用with=F
,它的行为与我预期的一样,将最后一列作为数据表返回。
> dt[,ncol(dt),with=F]
C
1: 30
2: 30
3: 30
这将返回与dt[,3]
相同的结果,这是有意义的。但是为什么dt[,ncol(dt)] = dt[,3]
不是真的呢?来自?data.table
,
当j是要选择的列名或位置的向量时(如在
中),则为data.frame。没有必要再使用with=FALSE了。
ncol(dt)
不是返回列位置的向量还是长度的向量吗?为什么dt[,ncol(dt)]
不返回最后一列的内容?
谢谢你的帮忙!
发布于 2020-11-24 22:31:49
我们需要drop = FALSE
为data.frame
df[,ncol(df), drop = FALSE]
默认情况下,它是TRUE
,如果我们检查?Extract
xi,j,.,drop = TRUE
对于data.table
,我们需要with = FALSE
dt[, ncol(dt), with = FALSE]
并且在?data.table
帮助中提到了
时,j是列名的字符向量,是要选择的列位置的数字向量,或者是startcol:endcol形式的数字向量,返回的值总是data.table。不再需要with=FALSE来动态选择列。请注意,x,cols等于x,..cols和x,cols,with=FALSE和x,.SD,.SDcols=cols.
。
https://stackoverflow.com/questions/64995804
复制相似问题