gpt4 book ai didi

R for 循环 n 次

转载 作者:行者123 更新时间:2023-12-04 12:03:53 24 4
gpt4 key购买 nike

我正在尝试编写一个 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 就会中断(根据定义现在等于零)小于 delta。我认为你需要设置 TSR0 = TSR只有在测试它们之间的差异之后,而不是之前。

关于R for 循环 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47361434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com