Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带循环和if语句的平衡不完全块设计_R_Experimental Design - Fatal编程技术网

R 带循环和if语句的平衡不完全块设计

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-

我有一个代码,我用它来生成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 ...
};

谢谢你的评论!然而,当我输入代码时,我得到了下面的错误。optBlock~、withinData=factor1:trt、blocksizes=repk中出错:withinData行数不足以支持被阻止的模型。我无法使用现有信息诊断该错误。如果您愿意,请发布另一个关于堆栈溢出的问题,并包括与错误相关的所有代码。忽略上面的注释。谢谢你的代码!!只是不确定验证后的设计将保存在哪里?我理解第一个条件是验证设计是否为BIBD。所以我假设就在休息之前;语句,我应该添加一个代码来保存它吗?第二个if语句有什么用?当设计不是BIBD时是否使用它,以便BIBD.good再次为空并被发送到下一次迭代?我认为这里可能对保存的含义有一些混淆。我把save理解为在变量中捕获对象,这是bibd.good,让我重新表述一下我想说的。我想知道在1到100次迭代中,哪次迭代代码给了我们BIBD。我能知道吗?可能是一个mesage box或结果数据集,或者任何能给我结果提示的东西?