如何限制R中自定义函数的输入值?

时间:2013-04-17 16:20:26

标签: r function

我写了一个定制的em算法函数。我有三个参数需要估算。这三个参数都在0和1之间,加起来为1.所以我想我只需要在我的函数中放入两个参数,alpha和beta,第三个参数将是1-alpha-beta。我的问题是如何让函数知道这两个输入只能取0到1之间的值?

2 个答案:

答案 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无关。

您必须就如何限制参数值alphabeta做出算法决策。您可能正在寻找所谓的约束优化,如Paul Hiemstra所述。决定将取决于您试图解决的问题的统计(或数学或物理等)含义。

如果您处于初级阶段,我建议从最简单和最严格的方法开始:在迭代期间,如果您的参数超出允许的间隔,请将其值设置为相应的限制。像这样:

alpha = min(1, max(0, alpha))