R 带循环和if语句的平衡不完全块设计
我有一个代码,我用它来生成R中的平衡不完全区组设计。我们的trt值为14,k值为4,这是固定的。但是,我们更改find.bib函数中b的值以生成设计,并使用isGYD函数检查该设计是否为平衡不完全块设计R 带循环和if语句的平衡不完全块设计,r,experimental-design,R,Experimental Design,我有一个代码,我用它来生成R中的平衡不完全区组设计。我们的trt值为14,k值为4,这是固定的。但是,我们更改find.bib函数中b的值以生成设计,并使用isGYD函数检查该设计是否为平衡不完全块设计 bibd <- find.BIB(trt = 14, k = 4, b = 64) bibd isGYD(bibd) 问题是,我必须多次这样做,可能要数百次,直到我们从isGYD函数得到确认,该设计是一个平衡的不完整块设计。我们手动完成这项任务 我的问题是,我们能否通过for循环和If-
bibd <- find.BIB(trt = 14, k = 4, b = 64)
bibd
isGYD(bibd)
问题是,我必须多次这样做,可能要数百次,直到我们从isGYD函数得到确认,该设计是一个平衡的不完整块设计。我们手动完成这项任务
我的问题是,我们能否通过for循环和If-Then条件的组合来实现自动化?我的算法是,对于i=1到100,创建一个块设计,然后测试该设计是否为平衡不完全设计。如果是,则保存此设计并退出循环。若它不是平衡的不完整设计,继续循环的下一次迭代
# run this 1 to 100 times
for (i in 1:100) {
#create balanced incomplete block design by passing value of i fo b
bibd <- find.BIB(trt = 14, k = 4, b = i)
#check if this design is a balanced incomplete block design
if (isGYD(bibd)) {
#save this design and exit loop
}
#if this iteration didn't give us balanced incomplete block design, take us to next iteration
}
有什么帮助吗?是的,您可以简单地分配一个变量并中断循环:
bibd.good <- NULL;
for (i in 1:100) {
bibd <- find.BIB(trt = 14, k = 4, b = i);
if (isGYD(bibd)) {
bibd.good <- bibd;
break;
};
};
if (!is.null(bibd.good)) {
## ... use bibd.good ...
};
谢谢你的评论!然而,当我输入代码时,我得到了下面的错误。optBlock~、withinData=factor1:trt、blocksizes=repk中出错:withinData行数不足以支持被阻止的模型。我无法使用现有信息诊断该错误。如果您愿意,请发布另一个关于堆栈溢出的问题,并包括与错误相关的所有代码。忽略上面的注释。谢谢你的代码!!只是不确定验证后的设计将保存在哪里?我理解第一个条件是验证设计是否为BIBD。所以我假设就在休息之前;语句,我应该添加一个代码来保存它吗?第二个if语句有什么用?当设计不是BIBD时是否使用它,以便BIBD.good再次为空并被发送到下一次迭代?我认为这里可能对保存的含义有一些混淆。我把save理解为在变量中捕获对象,这是bibd.good,让我重新表述一下我想说的。我想知道在1到100次迭代中,哪次迭代代码给了我们BIBD。我能知道吗?可能是一个mesage box或结果数据集,或者任何能给我结果提示的东西?