我使用以下代码获得了名为bcvCindex$BootstrapCrossValCindexMat
的元素列表:
library(prodlim)
set.seed(13)
dat <- SimSurv(100)
library(survival)
library(randomForestSRC)
cox12 <- coxph(Surv(time,status)~X1+X2,data=dat,x=TRUE,y=TRUE)
cox1 <- coxph(Surv(time,status)~X1,data=dat,x=TRUE,y=TRUE)
cox2 <- coxph(Surv(time,status)~X2,data=dat,x=TRUE,y=TRUE)
rsf1 <- rfsrc(Surv(time,status)~X1+X2,data=dat,ntree=15,forest=TRUE)
bcvCindex <- pec::cindex(list("Cox X1"=cox1,
"Cox X2"=cox2,
"Cox X1+X2"=cox12,
"RSF"=rsf1),
formula=Surv(time,status)~X1+X2,
data=dat,
splitMethod="bootcv",
B=5,
eval.times=seq(1,15,1),keep.index = T, keep.matrix = T)
bcvCindex$BootstrapCrossValCindexMat
现在,我想要一个将列表bcvCindex$BootstrapCrossValCindexMat
作为输入并计算标准偏差的函数
对于属于它的所有矩阵的每个列,并将结果保存在矩阵中。所以我尝试了这个:
sdlist <- function(dat){
for (i in 1:4) {
for (j in i:15) {
desv <- matrix(nrow = 15,ncol = 4)
desv[i,j] <- sd(dat[[i]][,j],na.rm = TRUE)
}
}
return(desv)
}
sdlist(bcvCindex$BootstrapCrossValCindexMat)
但是我得到一个错误。 我该怎么办?
答案 0 :(得分:1)
我想您的索引编制有误,也许j
应该来自1:15
?
desv <- matrix(nrow = 15,ncol = 4)
for (i in 1:4) {
for (j in 1:15) {
desv[j,i] <- sd(bcvCindex$BootstrapCrossValCindexMat[[i]][,j],na.rm = TRUE)
}
}
desv
# [,1] [,2] [,3] [,4]
# [1,] 0.12221703 0.27702617 0.21258140 0.17635813
# [2,] 0.06792337 0.19487364 0.10424801 0.10408433
# [3,] 0.04495142 0.10162221 0.04776731 0.04416194
# [4,] 0.04401065 0.03845927 0.02661981 0.03254349
# [5,] 0.04249740 0.02462305 0.03443833 0.04533295
# [6,] 0.03816007 0.02692455 0.03121927 0.03708299
# [7,] 0.03085838 0.01883299 0.03144583 0.03666845
# [8,] 0.02377988 0.02030952 0.03029617 0.04069027
# [9,] 0.02373149 0.02035156 0.02956866 0.05068533
#[10,] 0.02416888 0.02323705 0.03130279 0.06720171
#[11,] 0.02417066 0.02376682 0.02883293 0.08202715
#[12,] 0.02419084 0.02347690 0.02938568 0.05920891
#[13,] 0.02419084 0.02347690 0.02938568 0.05920891
#[14,] 0.02419084 0.02347690 0.02938568 0.05920891
#[15,] 0.02419084 0.02347690 0.02938568 0.05920891
这也可以通过双sapply
循环完成
sapply(bcvCindex$BootstrapCrossValCindexMat, function(x)
sapply(1:ncol(x), function(y) sd(x[, y], na.rm = TRUE)))