Пользовательские переменные неправильно передаются в другую функцию

#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 пакет, а также работаю с функциями, поэтому простите мне недостаток знаний.