我正在使用desolve
库运行以下代码。现在,我想针对不同的koff_WT
值运行相同的代码。请提出任何简单的方法。
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 :(得分:1)
最好使用parms
参数将常量列表传递给complex
函数。目前,它什么也没做。
如果采用这种方式安排,则可以创建第二个函数,该函数将针对您喜欢的koff_WT
的任何值运行模拟:
library(deSolve)
Complex <- function (t ,y, parms){
y <- as.list(y)
list(c(dC_WT = parms$koff_WT * y$RL_WT - parms$kon_WT * y$R_WT * y$C_W,
dRL_WT = parms$kon_WT * y$R_WT * y$C_WT - parms$koff_WT * y$RL_WT,
dR_WT = parms$koff_WT * y$RL_WT - parms$kon_WT * y$R_WT * y$C_WT ))
}
ode_frame <- function(koff_var){
times <- seq(0, 1, 0.01)
data.frame(ode(y = c(C_WT = 10, RL_WT = 0, R_WT = 20),
times = times, func = Complex,
parms = list(kon_WT = 1, koff_WT = koff_var)))
}
因此,您可以使用koff_WT
为lapply
的三个不同值创建三个数据帧的列表:
new_koffs <- c(0.5, 1, 1.5)
Output <- lapply(new_koffs, ode_frame)
结果太大,无法在此处打印,但这是其结构:
str(Output)
#> List of 3
#> $ :'data.frame': 101 obs. of 4 variables:
#> ..$ time : num [1:101] 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ...
#> ..$ C_WT : num [1:101] 10 8.27 6.95 5.91 5.08 ...
#> ..$ RL_WT: num [1:101] 0 1.73 3.05 4.09 4.92 ...
#> ..$ R_WT : num [1:101] 20 18.3 16.9 15.9 15.1 ...
#> $ :'data.frame': 101 obs. of 4 variables:
#> ..$ time : num [1:101] 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ...
#> ..$ C_WT : num [1:101] 10 8.27 6.96 5.94 5.13 ...
#> ..$ RL_WT: num [1:101] 0 1.73 3.04 4.06 4.87 ...
#> ..$ R_WT : num [1:101] 20 18.3 17 15.9 15.1 ...
#> $ :'data.frame': 101 obs. of 4 variables:
#> ..$ time : num [1:101] 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 ...
#> ..$ C_WT : num [1:101] 10 8.27 6.97 5.96 5.17 ...
#> ..$ RL_WT: num [1:101] 0 1.73 3.03 4.04 4.83 ...
#> ..$ R_WT : num [1:101] 20 18.3 17 16 15.2 ...
答案 1 :(得分:1)
您可以使用函数来定义函数Complex()
library("deSolve")
kon_WT = 1
## koff_WT = 10
R_WT = 20
defComplex <- function(koff) {
return( function (t, y, parms) {
with(as.list(y), {
dC_WT <- koff*RL_WT - kon_WT*R_WT*C_WT
dRL_WT <- kon_WT*R_WT*C_WT - koff*RL_WT #uM
dR_WT <- koff*RL_WT - kon_WT*R_WT*C_WT
return(list(c(dC_WT, dRL_WT, dR_WT)))
})
})
}
resC_WT <- function(iC_WT) {
imes <- 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
Complex <- defComplex(koff=10)
sapply(vectorC_WT, FUN=resC_WT)
Complex <- defComplex(koff=15)
sapply(vectorC_WT, FUN=resC_WT)
这不是很优雅,但是可以。
另外,您可以将两个工作行放在一个函数中,以使用另一个lapply()调用。