将多重估算数据集提取到数据框列表中

Extract multiply imputed datasets into a list of data frames

我正在使用 mice 包对我的数据执行多重插补,并希望将结果提取为数据框列表。这是我尝试过的,使用 mapmice::complete.

library(mice)

m = 2
data <- airquality[1:30,]
imp <- mice(data, seed = 123, m, print = F) #impute data
imp_list_df <- map(1:m, function(x) complete(imp, x))

我希望每个对象的类如下:

> class(imp_list_df)
[1] "list"
> class(imp_list_df[1])
[1] "data.frame"

目前 class(imp_list_df[1]) return 秒 "list"。关于我可以使用而不是映射到 return 数据框列表的函数有什么想法吗?

它是 data.frames 的 list 个。

str(imp_list_df)
List of 2
 $ :'data.frame':   30 obs. of  6 variables:
  ..$ Ozone  : int [1:30] 41 36 12 18 6 28 23 19 8 30 ...
  ..$ Solar.R: int [1:30] 190 118 149 313 8 313 299 99 19 194 ...
  ..$ Wind   : num [1:30] 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
  ..$ Temp   : int [1:30] 67 72 74 62 56 66 65 59 61 69 ...
  ..$ Month  : int [1:30] 5 5 5 5 5 5 5 5 5 5 ...
  ..$ Day    : int [1:30] 1 2 3 4 5 6 7 8 9 10 ...
 $ :'data.frame':   30 obs. of  6 variables:
  ..$ Ozone  : int [1:30] 41 36 12 18 18 28 23 19 8 16 ...
  ..$ Solar.R: int [1:30] 190 118 149 313 66 307 299 99 19 194 ...
  ..$ Wind   : num [1:30] 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
  ..$ Temp   : int [1:30] 67 72 74 62 56 66 65 59 61 69 ...
  ..$ Month  : int [1:30] 5 5 5 5 5 5 5 5 5 5 ...
  ..$ Day    : int [1:30] 1 2 3 4 5 6 7 8 9 10 ...

提取 list 的正确方法是使用 [[

class(imp_list_df[[1]])
[1] "data.frame"

当我们用[提取时,它仍然returns一个list,即使用[1],它提取为[=21的list =] 1 并且元素是 data.frame

> str(imp_list_df[1])
List of 1
 $ :'data.frame':   30 obs. of  6 variables:
  ..$ Ozone  : int [1:30] 41 36 12 18 6 28 23 19 8 30 ...
  ..$ Solar.R: int [1:30] 190 118 149 313 8 313 299 99 19 194 ...
  ..$ Wind   : num [1:30] 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
  ..$ Temp   : int [1:30] 67 72 74 62 56 66 65 59 61 69 ...
  ..$ Month  : int [1:30] 5 5 5 5 5 5 5 5 5 5 ...
  ..$ Day    : int [1:30] 1 2 3 4 5 6 7 8 9 10 ...
> str(imp_list_df[[1]])
'data.frame':   30 obs. of  6 variables:
 $ Ozone  : int  41 36 12 18 6 28 23 19 8 30 ...
 $ Solar.R: int  190 118 149 313 8 313 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...

此外,要一次检查每个元素的 class,请使用 sapply/lapply

sapply(imp_list_df, class)
[1] "data.frame" "data.frame"