Проблема с неиспользованным аргументом

Я использую простой код, показанный ниже, и получаю сообщение об ошибке: Ошибка в функции (время, состояние, параметры, ...): неиспользуемые аргументы (состояние, параметры). Похоже, эта ошибка возникает всякий раз, когда я использую функцию «function(koff_WT)», иначе модель работает нормально. Есть предложения, что может пойти не так?

library(deSolve)
kon_WT = 1e-4         
kd_WT = 0.01        
koff_WT = kon_WT*kd_WT 
R_WT = 1000       

Complex <- function(koff_WT) {
 function (t,y,parms){
  with(as.list(y,parms), {
    
    dC_WT <-  koff_WT*RL_WT -kon_WT*R_WT*C_WT 
    dRL_WT <- kon_WT*R_WT*C_WT - koff_WT*RL_WT   #nM
    dR_WT <-  koff_WT*RL_WT -kon_WT*R_WT*C_WT 
        
    return(list(c(dC_WT, dRL_WT, dR_WT)))
  })
  }
}

yini <- c(C_WT = 0.1, RL_WT = 0, R_WT= R_WT)
times <- seq(0,40000,100)      
Out <- ode(y = yini, times = times, func=Complex, parms=NULL)

Output <- data.frame(Out)
Result <- Complex(koff_WT =1) ; Result

person Khushhi    schedule 15.07.2020    source источник


Ответы (2)


Complex() - это factory, т. Е. Функция который возвращает функцию того типа, который ожидает ode. Поэтому вам нужно вызывать ode с помощью func=Complex(...), а не func=Complex.

Out <- ode(y = yini, times = times, 
      func=Complex(koff_WT=1), parms=NULL)
person Ben Bolker    schedule 15.07.2020

В исходном коде было несколько проблем: №1 уже был показан Беном Болкером (я просто вынес его в отдельную строку), №2 - отсутствующий c() в функции with и №3 - слишком большое значение параметра, так что модель сразу отказалась. №1 и №2 - это проблемы программирования, №3 - решение моделирования. Наконец, немного косметики для улучшения читабельности.

library(deSolve)
kon_WT  <- 1e-4         
kd_WT   <- 0.01        
koff_WT <- kon_WT * kd_WT 
R_WT    <- 1 # 1000                  # (3) R_WT was too high

Complex <- function(koff_WT) {
  function (t, y, parms){
    with(as.list(c(y,parms)), {      # (2) note c() to combine the vectors
      
      dC_WT <-  koff_WT * RL_WT     - kon_WT  * R_WT * C_WT 
      dRL_WT <- kon_WT  * R_WT*C_WT - koff_WT * RL_WT   #nM
      dR_WT <-  koff_WT * RL_WT     - kon_WT  * R_WT * C_WT 
      
      return(list(c(dC_WT, dRL_WT, dR_WT)))
    })
  }
}

yini <- c(C_WT = 0.1, RL_WT = 0, R_WT = R_WT)
times <- seq(0, 40000, 100)

model <- Complex(koff_WT) # (1) Complex is a factory (or closure), returning a function

Out <- ode(y = yini, times = times, func = model, parms = NULL)

plot(Out)
person tpetzoldt    schedule 15.07.2020