如何将带有列表列的标题转换为数据框列表

时间:2020-10-22 12:40:00

标签: r list purrr tibble

我有一个tibble,看起来像这样(我们叫它param_table):

+--------+------------------+
| name   | param            |
+--------+------------------+
| apple  | <named list [2]> |
+--------+------------------+
| orange | <named list [2]> |
+--------+------------------+
| pear   | <named list [2]> |
+--------+------------------+
| banana | <named list [2]> |
+--------+------------------+
  • 这个小舌是使用map(safely(...)...)对具有自定义功能的不同水果的结果。
  • 例如,调用param_table$param[[1]]将返回apple的结果:
$result

+-----+-------+-------+
|     | alpha | beta  |
+-----+-------+-------+
| 1   | 0.1   | 1.1   |
+-----+-------+-------+
| 2   | 0.2   | 1.2   |
+-----+-------+-------+
| 3   | 0.3   | 1.3   |
+-----+-------+-------+
| 4   | 0.4   | 1.4   |
+-----+-------+-------+
| 5   | 0.5   | 1.5   |
+-----+-------+-------+
| ... | ...   | ...   |
+-----+-------+-------+

(There are in total 10,000 rows, skipping the rest here) 

$error
NULL 
  • 我正在编写一个闪亮的应用程序,需要在其中直接调用$result中的表作为数据框。我不能像as.data.frame(param_table$param[[1]]$result)那样做某事,因为这是单个水果的手册,并不适用于所有水果。

  • 理想情况下,我希望最终结果看起来像这样:一个小标题,其中每个水果的参数值为df,而不是包含$resulterror的命名列表。换句话说,我想在丢掉$result的同时保留每个水果的$error

  • 我希望小标题看起来像这样

+--------+-----------------------+
| name   | param                 |
+--------+-----------------------+
| apple  | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| orange | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| pear   | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
| banana | <df[,2] [10,000 × 2]> |
+--------+-----------------------+
  • 如果我致电param_table$param[[1]],它将为我返回苹果的结果,如下所示:
+-----+-------+-------+
|     | alpha | beta  |
+-----+-------+-------+
| 1   | 0.1   | 1.1   |
+-----+-------+-------+
| 2   | 0.2   | 1.2   |
+-----+-------+-------+
| 3   | 0.3   | 1.3   |
+-----+-------+-------+
| 4   | 0.4   | 1.4   |
+-----+-------+-------+
| 5   | 0.5   | 1.5   |
+-----+-------+-------+
| ... | ...   | ...   |
+-----+-------+-------+

我应该编写一个函数进行这种转换吗?像这样:

for (i in names){
  as.data.frame(param_table1[[as.numeric(which(names == i))]])
}

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用map提取所需的组件:

param_table %>% 
 mutate(param = map(param, ~.x$result))