所以我不确定实现我想做的最佳方式。
这是我的问题:我正在使用包鼠标在R中使用多个插补,我使用函数cox.zph来获取每个插补模型的残差。我想平均所有估算的残差,只为每个变量得到一个值。老实说,我不知道如何实现这一目标。我看着lapply和mapply。
res.scho <- NULL
for (i in 1:m) {
res.scho[[i]] <- cox.zph(modf$analyses[[i]])
}
res.scho[[1]]
rho chisq p
Alc=1 0.0622 0.552 4.58e-01
HIV=1 0.1050 1.873 1.71e-01
Diabetes=1 -0.1240 2.227 1.36e-01
age -0.1388 2.877 8.99e-02
GLOBAL NA 44.467 5.97e-08
基本上我有数据集和res.scho [[m]],我想将每个res.scho合并为一个。
我仍然非常坚持使用其他语言的forloops而且我在使用mapply时遇到了一些问题。这可能是问题之一。尽管如此,如果有人能给我一些指导来帮助我实现这一目标并更好地使用R,我将非常感激。
谢谢!
修改
预期输出:
假设我有两个插补数据集。 m = 2的
res.scho[[1]]
rho chisq p
Alc=1 0.0622 0.552 4.58e-01
HIV=1 0.1050 1.873 1.71e-01
Diabetes=1 -0.1240 2.227 1.36e-01
age -0.1388 2.877 8.99e-02
GLOBAL NA 44.467 5.97e-08
res.scho[[2]]
rho chisq p
Alc=1 0.0522 0.752 5.58e-01
HIV=1 0.1550 1.473 2.71e-01
Diabetes=1 -0.1140 2.927 4.36e-01
age -0.1188 2.077 3.99e-02
GLOBAL NA 44.400 7.97e-08
我想要的输出与列表的形式相同,但每个值的平均值为两个,例如:
Average_res.scho
rho chisq p
Alc=1 0.0572 0.652 5.08e-01
HIV=1 0.1300 1.673 2.21e-01
Diabetes=1 -0.1190 2.577 2.86e-01
age -0.1288 2.477 4.24e-02
GLOBAL NA 44.433 6.97e-08
例如rho的列是由colum(res.scho [[1]] + res.scho [[2]])/ 2
获得的EDIT1
按照konvas的建议,我试图用他的想法来获得所需的输出。以下是我到目前为止的情况:
rho <- NULL
chisq <- NULL
p <- NULL
for (i in 1:70) {
rho[[i]] <- res.scho[[i]]$table[,"rho"]
chisq[[i]] <- res.scho[[i]]$table[,"chisq"]
p[[i]] <- res.scho[[i]]$table[,"p"]
我为res.scho的每一列提取了一个列表 - 这不是完美的解决方案。所以,如果我做rho [[1]],我会看到第一列
[[1]]
CliForm=1 Sit=2 Alc=1 HIV=1 Diabetes=1 age GLOBAL
0.17300198 -0.45800541 0.06224951 0.10495093 -0.12401631 -0.13879592 NA
现在,我会考虑为rho,chisq和p:
for (i in 1:70) {
result <- sapply(names(rho[[1]]),
function(x) colMeans(sapply(rho, "[[", x)))
}
我得到了以下我一直在努力解决的错误:
Error in colMeans(sapply(rho, "[[", x)) : 'x' must be an array of at least two dimensions
答案 0 :(得分:1)
首先,为列表res.scho
的每个条目提取相关的系数矩阵:
res.scho.tables <- lapply(res.scho, `[[`, "table")
然后,因为你想要的只是一个平均值(并且矩阵可以非常快地加上元素)你可以调用
Average_res.scho <- do.call(`+`, res.scho.tables) / length(res.scho.tables)