从函数向data.frame添加列

时间:2014-12-12 16:43:59

标签: r function dataframe

我正在建立药物功效的功能,这取决于给药年龄和给药后的年数。这个想法是在你得到它时弄清楚药物的功效,然后随着时间的推移降低疗效;例如,在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))
  }
}

1 个答案:

答案 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