在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
有关,但不知道在哪里寻找对象shape
和scale
,但是我认为这正是省略号的作用:允许我把参数定义“搁置”,直到一个实际调用该函数为止。我在哪里错了,谁能给我一个线索,以便在哪里寻找有关此特定问题的见解?
答案 0 :(得分:1)
您非常亲密,只需要使用椭圆...
注意::c
中没有定义AR
,所以我添加了它并给了它一个值。
NB2 :我将避免在您的函数中使用c
和sample
,因为这些函数本身就是函数,可能会造成一些混乱。
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)