如何将列表列表拆分为数据框以便在R中的Shiny app中使用?

时间:2015-08-31 21:06:00

标签: r shiny

原始列表

以下是我正在使用的列表。随着收集的数据越来越多,我将获得更多类似的列表,每个列表都包含不同数量的元素(也包括列表):

> str(ADOs)
List of 2
 $ TrucPropk:List of 8
  ..$ distance         : num [1:13626, 1] 0 0.784 1.569 2.354 3.137 ...
  ..$ frames           : int [1:13626(1d)] 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 ...
  ..$ heading          : num [1:13626, 1] 3.14 3.14 3.14 3.14 3.14 ...
  ..$ pitch            : num [1:13626, 1] 0.00 0.00 1.70e-05 1.70e-05 5.88e-05 ...
  ..$ pos              : num [1:13626, 1:3] -9524 -9524 -9524 -9524 -9524 ...
  ..$ relative_distance: num [1:13626, 1] 92.6 92.6 92.6 92.6 92.6 ...
  ..$ roll             : num [1:13626, 1] 0.00 0.00 1.00e-36 1.00e-36 -4.48e-05 ...
  ..$ speed            : num [1:13626, 1] 14.3 14.3 14.4 14.4 14.3 ...
 $ Truck    :List of 8
  ..$ distance         : num [1:13092, 1] 0 1.34 2.69 4.03 5.38 ...
  ..$ frames           : int [1:13092(1d)] 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 ...
  ..$ heading          : num [1:13092, 1] 3.14 3.14 -3.14 -3.14 -3.14 ...
  ..$ pitch            : num [1:13092, 1] 0.00 0.00 1.01e-06 1.01e-06 3.20e-06 ...
  ..$ pos              : num [1:13092, 1:3] -9512 -9512 -9512 -9512 -9512 ...
  ..$ relative_distance: num [1:13092, 1] -268 -268 -267 -267 -267 ...
  ..$ roll             : num [1:13092, 1] 0.00 0.00 1.78e-05 1.78e-05 8.86e-05 ...
  ..$ speed            : num [1:13092, 1] 24.6 24.6 24.6 24.6 24.6 ...

在上面的列表中,有2个列表,其中包含8个元素。但是这些数字可能会在其他列表中发生变化。

目标

我想将原始列表拆分为具有相同名称的单独数据框(在本例中为2)(在此示例中为' TrucPropk'' Truck')。我想在代码中为闪亮的应用程序执行此操作。

我尝试了什么

Google搜索结果显示此answer为最高结果。这会将列表拆分为列表并存储到全局环境中。但我想分成数据框并在应用程序中使用它们。

问题

如何将列表中的列表转换为单独的数据框,以便在闪亮的应用程序中使用?是否有dplyr解决方案?

1 个答案:

答案 0 :(得分:1)

data.frame列为具有更多属性的列表,因此可以轻松地在两者之间进行转换。

res <- lapply(ADOs, data.frame)

测试用例:

tst <- list(as.list(mtcars), as.list(iris))
res <- lapply(tst, data.frame)