传递本身是参数的R函数的参数

时间:2018-10-15 14:34:58

标签: r function

在R中,环境等始终使我感到困惑。我猜这是更多的参考信息,因为我在最后一个小时一直在网站上进行搜索,以寻求无济于事的答案。

我有一个简单的R函数,叫做target,定义如下:

target <- function(x,scale,shape){

    s <- scale
    b <- shape

    value <- 0.5*(sin(s*x)^b + x + 1)
    return(value)

}

然后定义函数AR

AR <- function(n,f,...){
    variates <- NULL

    for(i in 1:n){
        z <- runif(1)
        u <- runif(1)

        if(u < f(z, scale, shape)/c){
            variates[i] <- z
            }else{next}

}
    variates <- variates[!is.na(variates)]
    return(variates)
}

其中正在评估功能target

。不幸的是,呼叫返回以下错误

sample <-  AR(n = 10000, f = target, shape = 8, scale = 5)
     Error in fun(z, scale, shape) : object 'shape' not found

我知道这与功能AR有关,但不知道在哪里寻找对象shapescale,但是我认为这正是省略号的作用:允许我把参数定义“搁置”,直到一个实际调用该函数为止。我在哪里错了,谁能给我一个线索,以便在哪里寻找有关此特定问题的见解?

1 个答案:

答案 0 :(得分:1)

您非常亲密,只需要使用椭圆...

注意:c中没有定义AR,所以我添加了它并给了它一个值。
NB2 :我将避免在您的函数中使用csample,因为这些函数本身就是函数,可能会造成一些混乱。

AR <- function(n, f, c, ...){
  variates <- NULL

  for(i in 1:n){
    z <- runif(1)
    u <- runif(1)

    if(u < f(z, ...)/c){ ##instead of using shape and scale use the ellipses and R will insert any parameters here which were not defined in the function
      variates[i] <- z
    }else{next}

  }
  variates <- variates[!is.na(variates)]
  return(variates)
}

sample <-  AR(n = 10000, f = target, shape = 8, scale = 5, c = 100)