通过平均列表r中的每个值将列表列表合并为一个列表

时间:2014-06-15 21:42:11

标签: r aggregate mean

所以我不确定实现我想做的最佳方式。

这是我的问题:我正在使用包鼠标在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 

1 个答案:

答案 0 :(得分:1)

首先,为列表res.scho的每个条目提取相关的系数矩阵:

res.scho.tables <- lapply(res.scho, `[[`, "table")

然后,因为你想要的只是一个平均值(并且矩阵可以非常快地加上元素)你可以调用

Average_res.scho <- do.call(`+`, res.scho.tables) / length(res.scho.tables)