将函数应用于数据帧的每一行并将矩阵保存在列表R中

时间:2018-07-31 16:14:19

标签: r

您好:我在堆栈溢出时发现了与此类似的问题,但没有一个回答我有的完整问题。我想将一个函数应用于数据帧的每一行,但是应用时函数的输出是一个矩阵,并且我想存储通过将该函数应用于列表中的每一行而产生的矩阵。这是我的数据示例:

County Pop18U propSusc18U PropUTD18U NoUTD18U NoSusc18U PopDensity

COUNTY1 143391       0.047      0.953   136603      6788     415.25

COUNTY2   4431       0.033      0.967     4283       148      22.14

COUNTY3 160896       0.047      0.953   153362      7534     784.28

COUNTY4   2424       0.095      0.905     2194       230       9.14

COUNTY5    778       0.060      0.940      731        47       1.41

COUNTY6    931       0.042      0.958      892        39       3.79

我希望每行产生一个SIR模型,该模型产生30天的S =易感,I =感染,R =恢复。上面的初始参数是S = propSusc18U,I = 0.000001(这仅表示一种新情况)和PropUTD18U。要针对一组参数生成此参数,可以应用以下方程式(来自:http://rstudio-pubs-static.s3.amazonaws.com/6852_c59c5a2e8ea3456abbeb017185de603e.html):

加载deSolve软件包以解决差分方程

#install.packages('deSolve')
library(deSolve)

创建SIR函数

sir <- function(time, state, parameters) {

  with(as.list(c(state, parameters)), {

    dS <- -beta * S * I
    dI <-  beta * S * I - gamma * I
    dR <-                 gamma * I

    return(list(c(dS, dI, dR)))
  })
}

### Set parameters
## Proportion in each compartment: Susceptible 0.999999, Infected 
0.000001, Recovered 0
init       <- c(S = 1-1e-6, I = 1e-6, R = 0.0)

## beta: infection parameter; gamma: recovery parameter
parameters <- c(beta = .95, gamma = .10)
## Time frame
times      <- seq(0, 30, by = 1)

## Solve using ode (General Solver for Ordinary Differential 
Equations)
#out <- ode(y = init, times = times, func = sir, parms = parameters)

我认为我需要这样的东西:

apply(dataframe, 1, ode(y = init, times = times, func = sir, parms = 
parameters))

结合以下内容:

### SAVE MATRICES ###
n=numeric(0)
list_mat <- list()
for (i in 1:3){
  n[i]=5^i
  m=numeric(0)
  m=matrix(data=0,nrow=n[i],ncol=n[i])

  for (j in n[i]:1){
    for (k in 1:i){
      m[j,k]=j+k
    }
  }
  list_mat[[i]] <- m #Holding Matrix
}

但是我被困住了。有人可以建议如何为上面的数据框中的6行中的每行保存矩阵吗?谢谢!

0 个答案:

没有答案