【问题标题】:R double for loop over a listR double for 循环遍历列表
【发布时间】: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 &lt;- 1:9 然后y[10] 返回NA
  • 制作一个可复制的小尺寸 2x4 示例,以演示出了什么问题。这将帮助您更好地了解问题并帮助我们帮助您。您也可以手动将ij 分别设置为1 和2,然后查看计算表达式返回的内容。这样,您可以“手动”调试正在发生的事情。

标签: r list for-loop matrix


【解决方案1】:

问题在于bias没有初始化为向量,而是初始化为标量:

bias <- 0
bias[1] <- bias[1] + 2  # ok: bias[1] == bias
bias[2] <- bias[2] + 3  # not ok: bias[2] is uninitialized and thus NA

偏见导致(2 NA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多