解决具有不同初始条件的ODE

时间:2020-06-22 12:32:47

标签: r function loops dataframe

我正在使用deSolve软件包运行以下功能。 我想为C_WT的不同初始值运行此函数,然后从数据帧Output中提取所有结果的最后一行。

有什么办法可以做到这一点?

kon_WT = 1         
koff_WT = 10
R_WT =   20

Complex <- function (t,y,parms){
  with(as.list(y), {
    
    dC_WT <-  koff_WT*RL_WT -kon_WT*R_WT*C_WT 
    dRL_WT <- kon_WT*R_WT*C_WT - koff_WT*RL_WT   #uM
    dR_WT <-  koff_WT*RL_WT -kon_WT*R_WT*C_WT 
      
    
    return(list(c(dC_WT, dRL_WT, dR_WT)))
  })
}
times <- seq(0,1,0.01)
Out <- ode(y = c(C_WT = 10, RL_WT = 0, R_WT= R_WT), 
        times = times, func=Complex, parms=NULL)
Output <- data.frame(Out)

2 个答案:

答案 0 :(得分:2)

是的,有一种方法可以做到,例如:

resC_WT <- function(iC_WT) {
  times <- seq(0,1,0.01)
  Out <- ode(y = c(C_WT = iC_WT, RL_WT = 0, R_WT= R_WT), times = times, func=Complex, parms=NULL)
  Output <- data.frame(Out)
  return(Output[nrow(Output), ])
}

vectorC_WT <- 1:11
sapply(vectorC_WT, FUN=resC_WT)

答案 1 :(得分:1)

## vector of starting values for C_WT
C_WT_vals <- seq(2,20, by =2)
## list of vectors of starting values
start_list <- lapply(C_WT_vals, function(x) c(C_WT=x, RL_WT=0, R_WT=R_WT))
## list of ODE outputs
Out_list <- lapply(start_list,
          ode, times = times, func=Complex, parms=NULL)
## extract last rows and put them in a data frame
do.call(rbind, lapply(Out_list, tail, 1))

       time       C_WT     RL_WT     R_WT
[101,]    1  0.6969385  1.303062 18.69694
[101,]    1  1.4568323  2.543168 17.45683
[101,]    1  2.2828569  3.717143 16.28286
[101,]    1  3.1774469  4.822553 15.17745
[101,]    1  4.1421356  5.857864 14.14214
[101,]    1  5.1774469  6.822553 13.17745
[101,]    1  6.2828569  7.717143 12.28286
[101,]    1  7.4568323  8.543168 11.45683
[101,]    1  8.6969385  9.303062 10.69694
[101,]    1 10.0000000 10.000000 10.00000
相关问题