2016-02-14 56 views
-1

我已经阅读了关于data.table的DataCamp课程,并且仍然对data.table中的j的行为感到困惑,J,由]。具体来说,我不能让data.table返回长度的正确值当我尝试索引中的列由一个号码(同时使用with=FALSE):无法返回data.table中列的长度()的正确值

library(data.table) lifetech.dt=data.table(a=c(1,2,3,4,5), b=c(1,2),d=c(5,6,7,8,9)) x=colnames(lifetech.dt) length_counter=NULL 

for (a in 1:length(x)){ 
    length_counter=c(length_counter,length(lifetech.dt[,a, with=FALSE])) } 
length_counter 

#should return a length of 5?, instead returns a length of 1 
length(lifetech.dt[,a, with=FALSE]) 
length(lifetech.dt[,3,with=FALSE]) 

#perhaps this way? But it returns 9 (the last value in col. d? 
lifetech.dt[.N,d] 

#want this, but without having to know the colname of column 4 is "d" is advance 
length(lifetech.dt[,d]) 
+0

您的代码格式出错了。请参阅[Markdown帮助 - 代码和预格式化文本](http://stackoverflow.com/editing-help#code)并请[编辑]您的文章。 –

+0

你可以让你的问题可重现吗? – geotheory

+6

data.frame/data.table的'length'是列数,而不是行数。我相信你会混淆这两件事。你可能需要'nrow'来代替。注意像'lifetech.dt [,1,with = FALSE]'这样的子集会返回一个data.table,而'lifetech.dt [,human_specific_miRBase_ID]'返回一个原子向量(因此,你可以运行'length'并获得该列的行数) –

回答

-1

正如@frank在评论中指出的那样,这个问题是The question asked here的重复。

Data.table从data.frame继承它的class = list状态,因此可以通过[[而不是[[而不是[所以,length(lifetech.dt[[3]])应该工作。

0

有两个等同的解决方案,这一点:

假设lifetech.dt有一个名为列 'columnA'

你可以做

length(lifetech.dt[,columnA,]) 

nrow(lifetech.dt[,"columnA",with=F]) 

都适用于data.table 1.9.6和R 3.2.2。

所以在你的情况下,第二个解决方案应该为你工作!