答案 0 :(得分:1)
我不清楚这个函数是否依赖于这些值(alpha,beta)或返回它们......
可能就像这样简单:
fun1 <- function(a,b){
if(a<=0 | b<=0) warning("value of a or b <=0")
if(a>=1 | b>=1) warning("value of a or b >=1")
### function does something
a1 <- a
b1 <- b
return(c(a1,b1,(1-a1-b1)))
}
在这里,您在运行该功能之前检查输入。
该功能仍会运行,但会警告用户,例如
> fun1(0.25,0.5)
[1] 0.25 0.50 0.25
但是
> fun1(1.25,-0.5)
[1] 1.25 -0.50 0.25
Warning messages:
1: In fun1(1.25, -0.5) : value of a or b <=0
2: In fun1(1.25, -0.5) : value of a or b >=1
如果由于输入值而暂停执行,请参阅?stop
并返回错误。
答案 1 :(得分:0)
如果您没有使用实现EM(期望最大化)算法的R包之一,例如mixtools
,那么您的问题实际上与R无关。
您必须就如何限制参数值alpha
和beta
做出算法决策。您可能正在寻找所谓的约束优化,如Paul Hiemstra所述。决定将取决于您试图解决的问题的统计(或数学或物理等)含义。
如果您处于初级阶段,我建议从最简单和最严格的方法开始:在迭代期间,如果您的参数超出允许的间隔,请将其值设置为相应的限制。像这样:
alpha = min(1, max(0, alpha))