我试图写一个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
答案 0 :(得分:6)
令人困惑的是,当您只将一个名称作为语句执行时(例如在语句print(TSR)
中),它通常会将该对象的值输出到控制台。但是,在循环内部,此默认打印被抑制。您需要使用for (i in 1:100) i
明确打印它。
我们可以在一个更简单的例子中看到这种行为。首先尝试这个
for (i in 1:100) print(i)
然后尝试这个
break
这就解释了为什么你看不到任何印刷品。但为什么没有情节?因为循环在到达之前退出TSR0 = TSR
。这将始终发生,因为您首先设置TSR - TSR0
,然后如果TSR0 = TSR
(现在根据定义等于零)小于delta,则中断。我认为您需要在测试它们之间的差异后才设置class EmployeeForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = models.Employee
fields = ('name', 'designation', 'section', 'phone_number', 'mobile_number',
'email', 'gender', 'role', 'username', 'password', 'avatar',)
def employee(request):
form = EmployeeForm(request.POST or None)
if request.method == "POST" and form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
email = form.cleaned_data['email']
office_instance = OfficeSetup.objects.get(owner=request.user)
form = form.save(commit=False)
form.office = office_instance
user = User.objects.create_user(
username=username, password=password, email=email)
user.save()
form.save()
messages.success(request, 'Thank you')
return redirect('employee-list')
messages.warning(request, 'Error')
context = {
'form': form
}
return render(request, 'dashboard/hrm/employee.html', context)
,而不是之前。