我正在建立药物功效的功能,这取决于给药年龄和给药后的年数。这个想法是在你得到它时弄清楚药物的功效,然后随着时间的推移降低疗效;例如,在50岁时服用药物,然后每年服用一次,看看疗效如何变化。该功能的修改版本如下。
我希望在最后得到的是药物功效的数据框架,每列是药物的给药年龄(例如,50,51,52,......,85)和每行是剂量后每年的功效(例如,1,2,...,10)。
我尝试过各种各样的事情,但基本上没有。下面这段代码是我得到的最接近的代码,但仍然是关闭的。如果需要,可以将功能重构为两个部分,如果这更容易的话。
此外,如果有一种简单的方法可以将列命名为很棒,但这是我现在最不关心的问题。
非常感谢任何帮助。谢谢
b2 <- 0.28
a1 <- 0.02
a2 <- 0.04
e <- exp(1)
p_tot <- 19132 + 18827 + 14505
p1 <- 19132
p2 <- 18827
p3 <- 14505
years_i <- seq(1, 10, by = 1)
age_j <- seq(50, 85, by = 1)
VEij <- function(age_j, years_i){
b1j <- ((a1 - a2*age_j)*p_tot + b2*(p1 + 2*p2 + 3*p3)) / p_tot
Efficacy <- b1j - b2*years_i
return(Efficacy)
}
EffDF <- data.frame(years_i)
for (x in age_j){
for (y in years_i){
EffDF <- cbind(EffDF, VEij(x, y))
}
}
答案 0 :(得分:1)
我猜这就是你想要的。
EffDF <- data.frame(sapply(as.list(age_j), VEij, years_i)
names(EffDF) <- age_j
截断输出:
> EffDF
50 51 52 53 54 55 56 57
1 -1.724694 -1.764694 -1.804694 -1.844694 -1.884694 -1.924694 -1.964694 -2.004694
2 -2.004694 -2.044694 -2.084694 -2.124694 -2.164694 -2.204694 -2.244694 -2.284694
3 -2.284694 -2.324694 -2.364694 -2.404694 -2.444694 -2.484694 -2.524694 -2.564694
4 -2.564694 -2.604694 -2.644694 -2.684694 -2.724694 -2.764694 -2.804694 -2.844694
5 -2.844694 -2.884694 -2.924694 -2.964694 -3.004694 -3.044694 -3.084694 -3.124694
6 -3.124694 -3.164694 -3.204694 -3.244694 -3.284694 -3.324694 -3.364694 -3.404694
7 -3.404694 -3.444694 -3.484694 -3.524694 -3.564694 -3.604694 -3.644694 -3.684694
8 -3.684694 -3.724694 -3.764694 -3.804694 -3.844694 -3.884694 -3.924694 -3.964694
9 -3.964694 -4.004694 -4.044694 -4.084694 -4.124694 -4.164694 -4.204694 -4.244694
10 -4.244694 -4.284694 -4.324694 -4.364694 -4.404694 -4.444694 -4.484694 -4.524694