为什么这个for循环的结果为零[已关闭]

0vvn1miw  于 2023-01-22  发布在  其他
关注(0)|答案(2)|浏览(98)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
5天前关闭。
Improve this question
我在R中写了一个for循环累加,为什么最后的结果是零?
有什么我能做的吗?谢谢。

mse =numeric()

for (i in 1:nrow(m1$v)){ 

   i_d = 128-i
    for (j in 1:ncol(m1$v)){
      
      j_d = 128-j
      lam_hij = m1$v[i,j]
      lam_ij = km[i_d,j_d]
      mse_ = ( lam_hij -lam_ij )^2
      if (is.na(mse_)&&isTRUE(is.na(mse_))){mse_=0}
      mse = mse + mse_
      
      
    
    }
   i = i+1
       
}
mse

我想看到零以外的东西

e0bqpujr

e0bqpujr1#

两个问题:
1.你不展示数据。
1.不显示输出
我想在控制台对话框的这个小片段中可以看到可能发生的情况:

> 1+numeric()
 numeric(0)

所以结果实际上不是零,而是一个空的(长度= 0)数值向量,对空加一些东西是可以论证的未定义的,所以人们可能期望NA作为结果,但在这个例子中肯定不是1。
您可以尝试将mse设置为0,然后重新运行代码。

q9yhzks0

q9yhzks02#

我不回答你的问题,因为我想上面有人做了。
但是考虑到你的代码,这里有一个建议。你应该在循环外创建向量,矩阵等,然后在循环内填充它们。这是为了避免在启动一些很长的循环时计算时间太长。
请看下面我的意思作为一个简单的例子。

#your method
    x <- 0
    system.time(
    for(i in 2:10000)
    {
    x <- c(x,x[i-1]+i)
    }
    )
utilisateur     système      écoulé 
       0.10        0.07        0.16 

    #better 
    z <- rep(NA,10000)
    z[1] <- 0
    system.time(
    for(i in 2:10000)
    {
    z[i] <- z[i-1]+i
    }
    )
utilisateur     système      écoulé 
          0           0           0 
    all(x == z)
    TRUE

您的方法需要一点时间,而它不应该。

相关问题