#r
#r
Вопрос:
Я пытаюсь написать функцию для вычисления размеров выборки в 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. предполагается, что функция
p
inlog_reg_var()
являетсяpower
inpower
параметром вsample size
функции?2. Нет.
p
предполагается, что он передается вlog_reg_var()
.power
Параметр, если он не указан, должен быть равен 0.8. Это понятно?
Ответ №1:
Вам нужно добавить дополнительный параметр 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