for 循环不显示输出
No output displayed from for loop
我正在尝试编写一个 for 循环来重复 (c) 和 (d) 100 次。我想在 for 循环的每次迭代中打印 TRS-TRS0 的估计值。如果它很小(比如 1/10000),它应该停止算法。最后,我希望它创建一个显示每个值的图。
我想我拥有这里的一切,但是当我 运行 它时,我没有看到任何事情发生。我错过了什么吗?
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
令人困惑的是,当您只执行一个名称作为语句时(例如,在您的语句 TSR
中),它通常会将该对象的值打印到控制台。然而,在一个循环中,这个默认打印被抑制了。您需要使用 print(TSR)
.
显式打印它
我们可以在一个更简单的例子中看到这种行为。首先试试这个
for (i in 1:100) i
那就试试这个
for (i in 1:100) print(i)
这就是您看不到任何打印内容的原因。但是为什么没有剧情呢?因为循环在到达那里之前在 break
退出。这将 总是 发生,因为你首先设置 TSR0 = TSR
,然后如果 TSR - TSR0
(现在根据定义等于零)小于增量,你就会中断。我认为您只需要在 测试它们之间的差异之后 设置 TSR0 = TSR
,而不是之前。
我正在尝试编写一个 for 循环来重复 (c) 和 (d) 100 次。我想在 for 循环的每次迭代中打印 TRS-TRS0 的估计值。如果它很小(比如 1/10000),它应该停止算法。最后,我希望它创建一个显示每个值的图。
我想我拥有这里的一切,但是当我 运行 它时,我没有看到任何事情发生。我错过了什么吗?
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
令人困惑的是,当您只执行一个名称作为语句时(例如,在您的语句 TSR
中),它通常会将该对象的值打印到控制台。然而,在一个循环中,这个默认打印被抑制了。您需要使用 print(TSR)
.
我们可以在一个更简单的例子中看到这种行为。首先试试这个
for (i in 1:100) i
那就试试这个
for (i in 1:100) print(i)
这就是您看不到任何打印内容的原因。但是为什么没有剧情呢?因为循环在到达那里之前在 break
退出。这将 总是 发生,因为你首先设置 TSR0 = TSR
,然后如果 TSR - TSR0
(现在根据定义等于零)小于增量,你就会中断。我认为您只需要在 测试它们之间的差异之后 设置 TSR0 = TSR
,而不是之前。