2017-11-18 9 views
3

forループを(c)と(d)を100回繰り返すように書こうとしています。 forループの各繰り返しでTRS-TRS0の見積もりを出力したいと思います。アルゴリズムが小さければ(例えば1/10000)、アルゴリズムを停止する必要があります。最後に、これらの値のそれぞれが表示されるプロットを作成します。R for loop n times

ここにはすべてがあると思いますが、実行すると何も起こりません。何か不足していますか?再現する

for (i in 1:100){ 
    #c) 
    fit1 = loess(res~x2, data=data.frame(res,x1,x2)) 
    f2=predict(fit1,newdata=data.frame(res,x1,x2)) 
    res=data$y-mean(data$y) -f2 
    #d) 
    fit2 = loess(res~x1, data=data.frame(res,x1,x2)) 
    f1=predict(fit2,newdata=data.frame(res,x1,x2)) 
    res=data$y - mean(data$y)-f1 

    TSR=sum((data$y-mean(data$y)-f1-f2)^2);TSR 
    if (abs(TSR-TSR0) > delta) TSR0=TSR else break 
    #continue 
    if (abs(TSR-TSR0) < delta) break 
    TSR0=TSR 
    val=TSR-TSR0;val 
    x11(); plot(x1,f1); plot(x2,f2) 
} 

は、ここで作成されたデータである。

set.seed(3) 
x1=runif(300);x2=runif(300) 
error=rnorm(300,mean=0,sd=3) 
z1=-2+3*x1; z2=2*sin(2*pi*x2) 
data=data.frame(x1,x2,y=z1+z2+error) 
#fit the model 
TSR0=0 
f10=0;f20=0 
res=data$y-mean(data$y) -f10 -f20; 
delta=.0001 

答えて

3

混乱は、あなたが文として名前だけを実行したときに(例えば、あなたの声明TSRに)、それは通常、その値を出力していることですオブジェクトをコンソールに追加します。しかし、ループ内では、このデフォルトの印刷は抑制されます。 print(TSR)で明示的に印刷する必要があります。

簡単な例では、この動作が確認できます。まず、あなたが何も印刷され表示されていない理由を説明することは、この

for (i in 1:100) print(i) 

を試してみてください、この

for (i in 1:100) i 

を試してみてください。しかし、なぜプロットはありませんか?そこに行く前に、ループはbreakで終了します。最初にTSR0 = TSRを設定したため、は常にになります。TSR - TSR0(定義ではゼロになりました)がデルタより小さい場合はブレークします。私はあなたが の後にの違いをテストした後にする必要があると思う。