r-使用Loop和if语句进行平衡的不完全块设计



我有一个代码,用来在R中生成平衡的不完全块设计。我们的trt值为14,k值为4,这是固定的。然而,我们在find.bib()函数中更改b的值以生成一个设计,并使用isGYD()函数检查该设计是否是平衡的不完全块设计。

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 ...
};

最新更新