Передача аргумента функции с точками - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь написать функцию для вычисления размеров выборки в R.

Функция использует несколько меньших функций. Я хотел бы передать аргументы в меньшие функции, используя точки. Вот моя функция до сих пор:

log_reg_var<-function(p){
  if(p<=0|p>=1) stop('p must be between 0 and 1')
  var<-1/(p*(1-p))
  return(var)
}

samplesize<-function(method_name, beta, sigma_x, mult_cor, power= 0.8,fpr = 0.05,...){

  if(method_name=='linear regression'){
    var_func <- lin_reg_var
  }
  else if(method_name=='logistic regression'){
    var_func <- log_reg_var
  }
  else if(method_name=='cox regression'){
    var_func <- cox_reg_var
  }
  else if(method_name=='poisson regression'){
    var_func <- pois_reg_var
  }
  else{
    stop('method_name not recognized. method_name accepts one of: "linear regression",
         "logistic regression","cox regression", or "poisson regression"')
  }

  top = (qnorm(1-fpr/2) + qnorm(power))^2
  bottom = (beta*sigma_x)^2*(1-mult_cor)

  n = (top/bottom)*var_func(...)

  return(ceiling(n))

}

Я должен быть в состоянии сделать

samplesize(method_name = 'logreg',1,1,0,p=0.5)
>>>32

Но вместо этого мне выдается следующая ошибка:

Error in var_func(...) : argument "p" is missing, with no default

Очевидно, что что-то не так, когда я пропускаю p через точки, но я не уверен, что не так.

В чем моя проблема?

1 Ответ

0 голосов
/ 25 марта 2019

Вам необходимо добавить дополнительный параметр p в качестве аргумента и передать его в вашу функцию log_reg_var().Вы также должны быть осторожны с другим синтаксисом:

log_reg_var<-function(p){
  if(p<=0|p>=1) stop('p must be between 0 and 1')
  var<-1/(p*(1-p))
  return(var)
}

# specify that you pass a parameter `p`
samplesize<-function(method_name, beta, sigma_x, mult_cor, power= 0.8,fpr = 0.05, p, ...){

# Initialize `var_func` to a NULL value
var_func = NULL

  if(method_name=='linear regression'){
    var_func <- lin_reg_var(p)
  }
  else if(method_name=='logistic regression'){
    # pass parameter `p` into log_reg_var since there is no default
    var_func <- log_reg_var(p)
  }
  else if(method_name=='cox regression'){
    var_func <- cox_reg_var(p)
  }
  else if(method_name=='poisson regression'){
    var_func <- pois_reg_var(p)
  }
  else{
    stop('method_name not recognized. method_name accepts one of: "linear regression",
     "logistic regression","cox regression", or "poisson regression"')
  }

  top = (qnorm(1-fpr/2) + qnorm(power))^2
  bottom = (beta*sigma_x)^2*(1-mult_cor)

  n = (top/bottom)*var_func

  return(ceiling(n))

}

> samplesize(method_name ='logistic regression', 1, 1, 0, p=0.5)
[1] 32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...