沿向量映射并使用 purrr 函数族输出嵌套列表(或嵌套 data.frames)的 data.frame 列?

map along a vector and output a data.frame column of nested lists (or nested data.frames) using purrr family of functions?

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

最小的可重现示例

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 

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

如何做到这一点?

一个选项是在 mutate 中使用 map 在数据框中创建一个列表。

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

您可以使用 rowwise :

library(dplyr)

df <- data.frame(input) 

df %>%
  rowwise() %>%
  mutate(rand_3 = list(input * rand))

#  input              rand_3
#1     1 0.288, 0.788, 0.409
#2     2 0.575, 1.577, 0.818
#3     3 0.863, 2.365, 1.227

lapply 以 R 为基数:

df$rand_3 <- lapply(df$input, `*`, rand)