我正在使用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)
答案 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