Функция mselect пакета drc не работает внутри функции

Я хотел использовать функцию mselec из пакета drc для выбора лучшей модели набора данных «доза-реакция». Однако mselect не работает, если вы используете его внутри функции.

Следующий код работает:

library(drc)
ryegrass.m1 <- drm(rootl~conc, data = ryegrass, fct = LL.4())

mselect(ryegrass.m1,list(LL.5(), LN.4(), W1.4(), W2.4()))

Но не этот:

best.fit=function(data){  
model1=drm(rootl~conc, data=data, fct=LL.4())
M1=drc::mselect(model1, list(LL.5(), LN.4(), W1.4(), W2.4()))
return(M1)
}

best.fit(ryegrass)

Я думаю, что проблема связана со средой в R, но я не знаю, как ее исправить. Кто-нибудь может мне помочь?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
200
2

Ответы 2

Мне удается решить проблему так:

best.fit=function(data){
  mf <- match.call(expand.dots = FALSE)
  m <- match(c("data"), names(mf), 0L)
  data.name=as.character(mf[m])

  model1=eval(parse(text=paste0('drm(rootl~conc, data=',data.name, ',fct=LL.4())')))
  M1=drc::mselect(model1, list(LL.5(), LN.4(), W1.4(), W2.4()))
  return(M1)
}

best.fit(ryegrass)

Должны быть способы сделать это лучше, но, по крайней мере, сейчас это работает для меня.

Похоже, что функция update в mselect не обращается к исходному фрейму данных при запуске изнутри функции. Мое решение заключалось в том, чтобы добавить аргумент data в строку 34.

[1]     my_mselect <- function(...
...
[33]    tempObj <- try(update(object, fct = fctList[[i]],
[34]                          data = object$origData),    # <--- line added here
[35]                          silent = TRUE)

Я также заметил, что ссылка на переменные модели также не работает, если их относительные положения используются вместо их исходных имен, например, при использовании drm(data[, 1] ~ data[, 2], fct = LL.4()). Чтобы избежать этого, вы можете использовать временный фрейм данных в своей функции, установить имена переменных по своему усмотрению и использовать эти имена в вызове drm.

best.fit <- function(data){
  tmp_data <- data
  names(tmp_data) <- c("Var1", "Var2")
  model1 <- drm(Var1 ~ Var2, data = tmp_data, fct = LL.4())
  M1 <- my_mselect(model1, list(LL.5(), LN.4(), W1.4(), W2.4()))
  return(M1)
}

Другие вопросы по теме

LMFIT - извлечение переменных из функции Fit
ValueError: установка элемента массива с последовательностью Ask
Определение FWHM из распределения в R
Расчет логарифмического правдоподобия с учетом предполагаемых параметров
Фиксированный коэффициент / смещение в модели Fine & Gray с поправкой на конкурирующий риск (FGR)
Подбор логнормального или пуассоновского распределения
Почему существует scipy.optimize.least_squares, когда scipy.optimize.minimize потенциально может использоваться для тех же целей?
Перебирать список моделей и сравнивать соответствие модели с помощью AIC, BIC
Подберите модель с несколькими входными параметрами, несколькими выходными данными, несколькими параметрами и ковариационными матрицами для каждой точки данных с помощью Python
Подгонка модели к наблюдаемым данным путем оптимизации параметров с использованием optim(), минимизирующей остаточную сумму квадратов