数据表中出错:项没有长度?-R

数据表中出错:项没有长度?-R,r,data.table,R,Data.table,我有一个R脚本,其中包含一个函数,我在回答这个问题时收到了这个函数: 脚本在我的数据集的第一部分工作得很好,但我现在尝试在另一部分使用它,据我所知,它与第一部分的格式完全相同,但由于某种原因,我在尝试使用脚本时出错。我不知道是什么原因导致了这个错误 这是我正在使用的脚本: require(data.table) MappingTable_Calibrated = read.csv2(file.choose(), header=TRUE) head(MappingTable_Calibrated

我有一个R脚本,其中包含一个函数,我在回答这个问题时收到了这个函数:

脚本在我的数据集的第一部分工作得很好,但我现在尝试在另一部分使用它,据我所知,它与第一部分的格式完全相同,但由于某种原因,我在尝试使用脚本时出错。我不知道是什么原因导致了这个错误

这是我正在使用的脚本:

require(data.table)

MappingTable_Calibrated = read.csv2(file.choose(), header=TRUE)
head(MappingTable_Calibrated)

#The data is sorted primarily after Scaffold number in ascending order, and secondarily after Cal_Startgen in ascending order.

MappingTable_Calibratedord = MappingTable_Calibrated[order(MappingTable_Calibrated$Scaffold, MappingTable_Calibrated$Cal_Startgen),]
head(MappingTable_Calibratedord)

dt <- data.table(MappingTable_Calibratedord, key = "Scaffold,Cal_Startgen")
head(dt)

# The following function creates pairs of loci for each scaffold.
# The function is a modified version of a function found retrieved from http://www.stackoverflow.com
但是当尝试创建“输出”时,我得到以下错误: 数据中出现错误。表(…,key=key(…1)):项1没有长度。提供至少一个要重复的项目(如NA、NA_整数_等),以匹配最长列中的2行。或者,所有列的长度都可以为0,用于将行插入。

dt如下所示:

Name          Length Startpos Endpos Scaffold Startgen Endgen Rev Match Cal_Startgen Cal_Endgen
1: Locus_7173    144        0    144       34   101196 101340   1     1       101196     101340
2: Locus_133     110        0    110       34   223659 223776   1     1       223659     223776
3: Locus_2746    161        0     89       65   101415 101504   1     1       101415     101576

“dt”的完整dput可在此处找到:

首先通过以下方式跟踪导致错误的数据:

function(dtIn, id){
    dtHead = head(dtIn, n = nrow(dtIn) - 1)     
    setnames(dtHead, paste0(colnames(dtHead), "_a")) 
    dtTail = tail(dtIn, n = nrow(dtIn) - 1)     
    setnames(dtTail, paste0(colnames(dtTail), "_b")) 
    r <- tryCatch(cbind(dtHead, dtTail, Scaffold = id, Pairwise_Distance = 0), error = function(e) NULL)
    if(is.null(r)) browser()
    r
}

这是不允许的。

我建议在nrow=0的情况下添加
if(nrow(
或类似内容),然后添加列
id=integer(),Pairwise\u Distance=numeric()

首先通过以下方式跟踪导致错误的数据:

function(dtIn, id){
    dtHead = head(dtIn, n = nrow(dtIn) - 1)     
    setnames(dtHead, paste0(colnames(dtHead), "_a")) 
    dtTail = tail(dtIn, n = nrow(dtIn) - 1)     
    setnames(dtTail, paste0(colnames(dtTail), "_b")) 
    r <- tryCatch(cbind(dtHead, dtTail, Scaffold = id, Pairwise_Distance = 0), error = function(e) NULL)
    if(is.null(r)) browser()
    r
}

这是不允许的。

我建议放置一个
if(nrow(
或类似内容),然后添加列
id=integer(),成对距离=numeric()
对于nrow=0的情况。

我不完全确定上面的说明。76 id等实际上告诉了我什么?我猜,最终的问题是什么,我的实际数据中是什么导致了问题?76个值并不重要。重要的是它是非零长度值,并且您正试图
cbind
将它归零行data.table。不能使用data.table,其中某些列的长度为0(data.tables中的所有列),而另一些列的长度为1(id变量).你好,Hjalte,我也遇到了同样的错误。是因为数据表还是其他原因?@AbhishekSingh因为你的代码没有处理一个数据表有0列而另一个表有非零列的情况。我不完全确定,上面显示了什么。76 id等实际上告诉了我什么?我猜,最终的qe是什么问题是,我的实际数据中是什么导致了问题?76个值并不重要。重要的是它是非零长度值,并且您正在尝试
cbind
it to zero rows data.table。您不能有data.table,其中一些列的长度为0(数据.tables中的所有列),而另一些列的长度为1(id变量).Hello Hjalte,我也收到了相同的错误。是因为数据表还是其他原因?@AbhishekSingh因为您的代码没有处理一个数据表有0列而另一个表有非零列的情况
Browse[1]> dtHead
Empty data.table (0 rows) of 9 cols: Name_a,Startpos_a,Endpos_a,Rev_a,Startgen_a,Endgen_a...
Browse[1]> dtTail
Empty data.table (0 rows) of 9 cols: Name_b,Startpos_b,Endpos_b,Rev_b,Startgen_b,Endgen_b...
Browse[1]> id
[1] 76
Browse[1]> 0
[1] 0