Передача аргументов функции R, которая сама является аргументом - PullRequest
0 голосов
/ 15 октября 2018

Среда и тому подобное всегда невероятно смущали меня в 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, но я подумал, что этов точности работа с многоточием: я могу поставить определение аргумента «на удержание», пока один из них не вызовет функцию.Где я ошибаюсь, и может ли кто-нибудь подсказать мне, где искать понимание этой конкретной проблемы?

1 Ответ

0 голосов
/ 15 октября 2018

Вы очень близки, вам просто нужно использовать свои эллипсы ...

NB: 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...