R 如何计算列表矩阵列的标准偏差

R 如何计算列表矩阵列的标准偏差,r,R,我使用以下代码获得了一个名为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,stat

我使用以下代码获得了一个名为
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
但是我犯了一个错误。
我该怎么办呢?

我想你的索引错了,也许
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

谢谢是,
j
应该从
1:15开始。您的建议非常优雅,使用了双sapply。我想更多地了解这种类型的循环。@Ronak:你能看看我的问题吗?谢谢我确实看过了。不幸的是,我没有答案。
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(bcvCindex$BootstrapCrossValCindexMat, function(x) 
    sapply(1:ncol(x), function(y) sd(x[, y], na.rm = TRUE)))