【发布时间】:2020-12-15 22:33:33
【问题描述】:
当我为一个巨大的列表创建双循环时遇到了麻烦,代码如下:
bootk=0
bias=0
Nk=0
#datalist = list()
for (i in 1:ksign){
for (j in 1:boottime){
if (i<=ksign1[j]){
bias[i]=bias[i]+(bigmatrix[,j]$V1.x[i]-bigmatrix[,j]$V1.y[i])
Nk[i]=Nk[i]+1
}
}
}
ksign 和 boottime 在这里只是两个数字。 bigmatrix 就像一个巨大的列表:
[,1] [,2] [,3] [,4] [,5]
Row.names Character,269 Character,266 Character,283 Character,273 Character,270
V1.x Numeric,269 Numeric,266 Numeric,283 Numeric,273 Numeric,270
V2.x Numeric,269 Numeric,266 Numeric,283 Numeric,273 Numeric,270
V1.y Numeric,269 Numeric,266 Numeric,283 Numeric,273 Numeric,270
V2.y Numeric,269 Numeric,266 Numeric,283 Numeric,273 Numeric,270
这是几个列表的组合,取决于boottime的值。这里我定义为 5。 但是在我运行代码之后,输出是这样的:
bias
[1] 2.521886 NA NA NA NA NA NA NA
[9] NA NA NA NA NA NA NA NA
[17] NA NA NA NA NA NA NA NA
[25] NA NA NA NA NA NA NA NA
[33] NA NA NA NA NA NA NA NA
我应该有一个偏差列表,其中的数字是ksign的值。 这里发生了什么?有什么想法吗?
【问题讨论】:
-
很难说没有看到数据,但您的大矩阵中可能有
NAs,或者您的索引超出范围。例如,如果y <- 1:9然后y[10]返回NA。 -
制作一个可复制的小尺寸 2x4 示例,以演示出了什么问题。这将帮助您更好地了解问题并帮助我们帮助您。您也可以手动将
i和j分别设置为1 和2,然后查看计算表达式返回的内容。这样,您可以“手动”调试正在发生的事情。