2015-05-04 112 views
0

在下面的代碼,我遇到了一個錯誤:問題與邏輯變量和循環

運行時錯誤 錯誤而(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 
} 
+1

'x0tol'在循環中變成NA(因爲'x0'變成NaN且'abs(NaN)> 0'NA)。 '而(NA)'產生你得到的錯誤。你沒有描述這個意圖,所以你不清楚你期望的行爲。 – MrFlick

+0

另外,x0會轉到-Inf,這可能不是您想要的。 – goodtimeslim

+0

我試圖爲兩個未知參數編寫一個簡單的線性迴歸模型。預期的結果是x0和x1基於提供的數據收斂到估計值。這應該小於一些容差值。 – derrick0285

回答

0

出於某種原因,假定在while循環的條件中存在NA值。只需更改語句並創建一個帶有中斷的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 
}