首页 > 解决方案 > 沿向量映射并使用 purrr 系列函数输出嵌套列表(或嵌套 data.frames)的 data.frame 列?

问题描述

我正在尝试映射一个向量,输入向量的每个元素的输出本身就是一个向量。换句话说,向量的第一个元素的输出是一个向量。第二,第三,第四等的输出也是如此。

最小的可重现示例

library(purrr)
library(tidyverse)

set.seed(123)
input <- c(1, 2, 3)
rand <- runif(3)


data.frame(input=input) %>% 
  map_df(function(x) { x * rand}) 

#   input
#   <dbl>
# 1 0.288
# 2 1.58 
# 3 1.23 

实际每行只返回一个值,而所需的输出是嵌套向量、列表或 data.frame(每行 3 个元素而不是 1 个元素是明智的)。

如何才能做到这一点?

标签: rpurrr

解决方案


一种选择是使用mapwithinmutate在数据框中创建一个列表。

data.frame(input=input) %>% 
 mutate(rand_3 = map(input, function(x) x * rand))


#------
  input                          rand_3
1     1 0.2875775, 0.7883051, 0.4089769
2     2 0.5751550, 1.5766103, 0.8179538
3     3 0.8627326, 2.3649154, 1.2269308

推荐阅读