首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么dt[,ncol(dt)]不返回列内容?

为什么dt[,ncol(dt)]不返回列内容?
EN

Stack Overflow用户
提问于 2020-11-24 22:31:13
回答 1查看 50关注 0票数 0

我根据@akrun (谢谢!)的评论编辑了这个问题,意识到我没有准确地问我的问题。

我不明白为什么下面的内容不返回数据表中最后一列的内容。

代码语言:javascript
运行
复制
> 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,它的行为与我预期的一样,将最后一列作为数据表返回。

代码语言:javascript
运行
复制
> 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)]不返回最后一列的内容?

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2020-11-24 22:31:49

我们需要drop = FALSEdata.frame

代码语言:javascript
运行
复制
df[,ncol(df), drop = FALSE]

默认情况下,它是TRUE,如果我们检查?Extract

xi,j,.,drop = TRUE

对于data.table,我们需要with = FALSE

代码语言:javascript
运行
复制
 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.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64995804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档