【问题标题】:Issues with logical variables and loops逻辑变量和循环的问题
【发布时间】:2015-07-13 08:43:05
【问题描述】:

在下面的代码中我遇到了错误:

运行时错误 while (x0tol) { 中的错误:需要 TRUE/FALSE 的缺失值 执行停止

如果我注释掉循环,x0tol 返回 TRUE 和逻辑类。我错过了什么?提前谢谢你。

a = c(1,2,2,3,3,4,5,6,6,6,8,10)
b = c(-890,1411,-1560,-2220,-2091,-2878,-3537,-3268,-3920,-4163,-5471,-5157)
data = data.frame(a,b)
tol = .0001
m = dim(data)[1]
x0 = 0
x1 = 0
x0temp = 1
x1temp = 1
alpha  = 1
x0tol = TRUE
while(x0tol){
    x0sum = 0
    x1sum = 0
    for (i in 1:m){ 
        x0sum = x0 + x1*data[m,1] - data[m,2]
        x1sum = (x0 + x1*data[m,1] - data[m,2])*data[m,1]
    }
    x0temp = x0 - alpha*1/m*x0sum
    x1temp = x1 - alpha*1/m*x1sum
    x0tol = (abs(x0 - x0temp) > tol) 
    x1tol = x1 - x1temp
    x0 = x0temp
    x1 = x1temp
    class(x0tol)
    x0tol
}

【问题讨论】:

  • x0tol 在循环中变为 NA(因为 x0 变为 NaN 并且 abs(NaN)>0 为 NA)。 while(NA) 生成您遇到的错误。您没有描述意图,因此不清楚您期望什么行为。
  • 此外,x0 转到-Inf,这可能是不希望的。
  • 我试图为两个未知参数编写一个简单的线性回归模型。期望的结果是 x0 和 x1 收敛到基于提供的数据的估计值。这应该小于某个容差值。

标签: r loops logical-operators


【解决方案1】:

由于某种原因,它假设您的 while 循环条件中有一个 NA 值。只需更改语句并创建一个带有 break 的 If 语句即可允许循环运行。干杯

while(TRUE){
  x0sum = 0
  x1sum = 0
  for (i in 1:m){ 
    x0sum = x0 + x1*data[m,1] - data[m,2]
    x1sum = (x0 + x1*data[m,1] - data[m,2])*data[m,1]
  }
  x0temp = x0 - alpha*1/m*x0sum
  x1temp = x1 - alpha*1/m*x1sum
  if (abs(x0 - x0temp) > tol){break}
  x1tol = x1 - x1temp
  x0 = x0temp
  x1 = x1temp
  class(x0tol)
  x0tol
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2012-02-24
    • 2010-10-13
    • 1970-01-01
    • 2018-11-13
    • 2020-12-01
    • 2011-06-14
    相关资源
    最近更新 更多