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

如何限制R中自定义函数的输入值?,r,function,R,Function,我写了一个自定义的em算法函数。我有三个参数需要估计。这三个参数都在0和1之间,加起来等于1。所以我想我只需要在函数中加入两个参数,alpha和beta,第三个参数是1-alpha-beta。我的问题是如何让函数知道这两个输入只能取0到1之间的值?我不太清楚所讨论的函数是依赖于这些值(alpha、beta)还是返回它们 是否可以简单到: fun1 <- function(a,b){ if(a<=0 | b<=0) warning("value of a or b <

我写了一个自定义的em算法函数。我有三个参数需要估计。这三个参数都在0和1之间,加起来等于1。所以我想我只需要在函数中加入两个参数,alpha和beta,第三个参数是1-alpha-beta。我的问题是如何让函数知道这两个输入只能取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(1.25,-0.5)
[1]  1.25 -0.50  0.25
警告信息:
1:在fun1(1.25,-0.5):a或b的值=1

如果您希望由于输入值而停止执行并返回错误,请参阅停止。如果您没有使用实现EM(期望-最大化)算法的R包,如mixtools,则您的问题实际上与R无关

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

如果您是初学者,我建议您从最简单、最严格的方法开始:在迭代过程中,如果您的参数超出允许的时间间隔,请将其值设置为相应的限制。大概是这样的:

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

如果其中一个参数超出该范围,您希望函数做什么?还是希望进行某种约束优化?
> 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
alpha = min(1, max(0, alpha))