#r #function #variables
#r #функция #переменные
Вопрос:
Я создал базовую функцию, которая определяет 2 переменные: Size и Param.
Size — это просто число, а Param — это слово или слова, разделенные символами подчеркивания.
Вот основная идея того, как выглядит функция и набор данных:
base_function <- function(Size,Param){
step_1 <- summarySE(alldata, measurevar = Param, groupvars=c("FinalPopSize",
"Time"), conf.interval=0.99)
step_2 <<- subset(step_1,FinalPopSize==Size)
nls(Param~SSlogis(logtime,Asym,xmid,scal), step_2)
}
Вот как выглядят данные, которые я передаю в эту функцию:
FinalPopSize Mut_Rate Time NucDiv No_Usable_Sites
10000 1e-04 16100 0.420789 300
10000 1e-04 16100 0.407146 300
10000 1e-04 16100 0.403797 300
10000 1e-04 16100 0.401119 300
10000 1e-04 16100 0.400203 300
10000 1e-04 16100 0.397348 300
Когда я пытаюсь запустить функцию, используя: base_function(10000,Mut_Rate)
Я возвращаю ошибку с nls, говорящую:
Error in model.frame.default(formula = ~Param...
Кажется, что переменная неправильно передается в nls()
и вместо этого читается как «Param».
Почему это относится к этой функции, но не к subset
or summarySE
?
Когда я смотрю на step_2, все выглядит великолепно.
Кроме того, когда я запускаю nls отдельно и вне функции, он также работает нормально: nls(Mut_Rate~SSlogis(logtime,Asym,xmid,scal),step_2)
Чего я не вижу?
Редактировать: summarySE
из Rmisc
Комментарии:
1. Вы не можете просто передавать символы в качестве имен столбцов функциям. У R нет способа узнать, должно ли имя в формуле быть переменной или именем столбца. Если вам нужно создать формулу динамически, то вам нужно будет использовать функцию, подобную
reformulate
. Я удивлен, чтоsummarySE
сработало. Из какого это пакета? Обязательно перечислите все неосновные R-пакеты, которые вы используете.2. Я не уверен, как это сделать. Когда я пытаюсь следовать примеру на странице справки по переформулировке, я получаю
~SSlogis(logtime, Asym, xmid, scal)
не ту часть, с которой у меня возникают проблемы. Я впервые вижуreformulate
пакет, а также работаю с функциями, поэтому простите мне недостаток знаний.