【发布时间】:2020-01-12 10:37:34
【问题描述】:
有了以下信息,
b0=data.frame(b0_1=c(11.41,11.36),b0_2=c(8.767,6.950))
b1=data.frame(b1_1=c(0.8539,0.9565),b1_2=c(-0.03179,0.06752))
b2=data.frame(b2_1=c(-0.013020 ,-0.016540),b2_2=c(-0.0002822,-0.0026720))
z=data.frame(z1=c(0.25,0.47),z2=c(0.48,0.57),z3=c(0.25,0.64))
T.val=data.frame(T1=c(1,1),T2=c(1,2),T3=c(2,1))
dt_data=cbind(b0,b1,b2,T.val,z)
fu.time=seq(0,2,by=0.8)
pat=ncol(T.val) #number of T's
nit=2 #no of rows
sd.val=c(0.48,0.65)
我可以计算三个不同的函数。第一个函数是b0 + b1*fu + b2*fu^2+z.,计算为
pt.array1=array(NA, dim=c(nit,length(fu.time),pat))
for ( it.er in 1:nit){
for ( ti in 1:length(fu.time)){
for (pt in 1:pat){
pt.array1[it.er,ti,pt]=b0[it.er,T.val[it.er,pt]]+b1[it.er,T.val[it.er,pt]]*fu.time[ti]+b2[it.er,T.val[it.er,pt]]*fu.time[ti]^2+z[it.er,pt]
}
}
}
现在找到平均值和分位数
pt.array1.mean=apply(pt.array1,c(3,2), mean)
pt.array1.LCI=apply(pt.array1,c(3,2), quantile, prob=0.25)
pt.array1.UCI=apply(pt.array1,c(3,2), quantile, prob=0.975)
第二个函数是b0 + b1*fu + b2*fu^2+z+2*sqrt(sd.val),计算如下
`
pt.array_UPI=array(NA, dim=c(nit,length(fu.time),pat))
for ( it.er in 1:nit){
for ( ti in 1:length(fu.time)){
for (pt in 1:pat){
pt.array_UPI[it.er,ti,pt]=b0[it.er,T.val[it.er,pt]]+b1[it.er,T.val[it.er,pt]]*fu.time[ti]+b2[it.er,T.val[it.er,pt]]*fu.time[ti]^2+z[it.er,pt]+2*sqrt(sd.val[it.er])
}
}
}
pt.array_UPI.mean=apply(pt.array_UPI, c(3,2), mean)
第三个功能是
b0 + b1*fu + b2*fu^2+z-2*sqrt(sd.val) 并计算为
pt.array_LPI=array(NA, dim=c(nit,length(fu.time),pat))
for ( it.er in 1:nit){
for ( ti in 1:length(fu.time)){
for (pt in 1:pat){
pt.array_LPI[it.er,ti,pt]=b0[it.er,T.val[it.er,pt]]+b1[it.er,T.val[it.er,pt]]*fu.time[ti]+b2[it.er,T.val[it.er,pt]]*fu.time[ti]^2+z[it.er,pt]+2*sqrt(sd.val[it.er])
}
}
}
pt.array_LPI.mean=apply(pt.array_LPI, c(3,2), mean)
`
所有代码都运行良好。我的问题是, 我可以在一个循环中或使用任何其他函数计算所有这些函数吗? 任何帮助表示赞赏。
【问题讨论】:
-
阅读 R 中的 apply 函数。当您发现自己正在编写三重嵌套的 for 循环时,是时候重构您的代码了。
-
有具体的链接吗? @BillO'Brien