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

  • 本文关键字:自定义函数 function
  • 更新时间 :
  • 英文 :


我编写了一个定制的em算法函数。我有三个参数需要估计。这三个参数都在0到1之间,加起来等于1。所以我认为我只需要在函数中加入两个参数,和,第三个参数是1-。我的问题是如何让函数知道这两个输入只能取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

如果您没有使用R软件包之一,如mixtools,实现EM(期望最大化)算法,那么您的问题实际上不是关于R的

你必须通过算法决定如何限制你的参数alphabeta的值。您可能正在寻找所谓的约束优化,正如Paul Hiemstra建议的那样。这个决定将取决于你试图解决的问题的统计(或数学或物理等)意义。

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

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

最新更新