如何处理R中for循环中的缺失数据(NA)

如何处理R中for循环中的缺失数据(NA),r,for-loop,missing-data,R,For Loop,Missing Data,我试图计算观察和模拟数据的卡方误差,并使用贝叶斯推理评估模型拟合。观察到的数据集包含缺少的(“NA”)值。但是,模拟值不存在缺失值。因此,我无法比较它们之间的差异统计数据 下面给出的代码是一个示例,与我的工作类似: p <- array(runif(3000*195*6, 0, 1), c(3000, 195, 6)) N <- array(rpois(3000*195, 10), c(3000, 195)) y <- array(0, c(195, 6)) for(j in

我试图计算观察和模拟数据的卡方误差,并使用贝叶斯推理评估模型拟合。观察到的数据集包含缺少的(“NA”)值。但是,模拟值不存在缺失值。因此,我无法比较它们之间的差异统计数据

下面给出的代码是一个示例,与我的工作类似:

p <- array(runif(3000*195*6, 0, 1), c(3000, 195, 6))
N <- array(rpois(3000*195, 10), c(3000, 195))
y <- array(0, c(195, 6))
for(j in 1:195){
  for(k in 1:6){
    y[j,k] <- (rbinom(1, N[j], p[1,j,k]))
  }
}

foo <- runif(50, 1, 195)
bar <- runif(50, 1, 6)
for(i in 1:50){
  y[foo[i], bar[i]] <- NA
}
谢谢,
Dan

您可以在内部循环中添加一个测试,并更改循环的顺序,如下所示:

...
for(j in 1:195){
   for(k in 1:6){
      if ( !is.na(y(j,k)) ) {
         for(i in 1:3000){
             ...
         }
      }
   }
}
...
为了提高效率,将内部循环矢量化(如上面的注释所述)


还可以定义与表示定义位置子集的
y
尺寸相同的逻辑数组,例如,
subset您可以在内部循环中添加测试,并按如下方式更改循环顺序:

...
for(j in 1:195){
   for(k in 1:6){
      if ( !is.na(y(j,k)) ) {
         for(i in 1:3000){
             ...
         }
      }
   }
}
...
为了提高效率,将内部循环矢量化(如上面的注释所述)


也可以定义与表示定义位置子集的
y
尺寸相同的逻辑数组,例如
y中的
子集。新[j,k]
行,您是否有意仅指
N[1:195]
(即N的第一列的前195行)?类似地,对于
p
,您只参考第1:195行(共3000行)和第1至第6列(共195列)。Oops是在早期版本中调整内容时留下的。现在对其进行了更新,以反映适当的[i,j,k]。谢谢。你的东西可以矢量化。要计算
eval
E
,您应该能够使用
eval,然后,如果您想要识别那些
NA
的元素,以便在其他矩阵中也将它们设置为
NA
,请尝试@jbaums正确指示的
y.new[is.NA(y)],
is.na
是您需要使用
na
s查找或执行逻辑操作的函数。关于那些
NA
s的查找,如果您想这样做,可以使用
which(is.NA(y),arr.ind=TRUE)
。这样,您将获得
y
NA
值的行数和列数。在
y.new[j,k]
行中,您是否有意仅指
N[1:195]
(即N的第一列的前195行)?类似地,对于
p
,您只参考第1:195行(共3000行)和第1至第6列(共195列)。Oops是在早期版本中调整内容时留下的。现在对其进行了更新,以反映适当的[i,j,k]。谢谢。你的东西可以矢量化。要计算
eval
E
,您应该能够使用
eval,然后,如果您想要识别那些
NA
的元素,以便在其他矩阵中也将它们设置为
NA
,请尝试@jbaums正确指示的
y.new[is.NA(y)],
is.na
是您需要使用
na
s查找或执行逻辑操作的函数。关于那些
NA
s的查找,如果您想这样做,可以使用
which(is.NA(y),arr.ind=TRUE)
。这样,您就可以获得
y
NA
值的行数和列数。
...
for(j in 1:195){
   for(k in 1:6){
      if ( !is.na(y(j,k)) ) {
         for(i in 1:3000){
             ...
         }
      }
   }
}
...