您好:我在堆栈溢出时发现了与此类似的问题,但没有一个回答我有的完整问题。我想将一个函数应用于数据帧的每一行,但是应用时函数的输出是一个矩阵,并且我想存储通过将该函数应用于列表中的每一行而产生的矩阵。这是我的数据示例:
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):
#install.packages('deSolve')
library(deSolve)
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行中的每行保存矩阵吗?谢谢!