mapply 输出列而不是列表

mapply that outputs a column not a list

是否有一个 purrr:: 函数可以像我下面的 mapply() 调用一样工作,但输出要添加到我的 data 而不是 list() 的列?

library(tidyverse)

m=
"
study group outcome
1     1       A
1     1       B
1     2       A
1     2       B
2     1       A
2     1       B
2     2       A
2     2       B
3     1       B
4     1       A
"
data =read.table(text=m,h=T)


set.seed(0)
(mapply(rnorm, n = sapply(group_split(data, study),nrow), mean=1:4*.1))

[[1]]
[1]  1.3629543 -0.2262334  1.4297993  1.3724293

[[2]]
[1]  0.61464143 -1.33995004 -0.72856703 -0.09472045

[[3]]
[1] 0.2942328

[[4]]
[1] 2.804653

可以unlist编辑。默认情况下 mapply 执行 SIMPLIFY = TRUE,但这仅适用于输出列表元素具有相同 length 的情况。在这里,它不是,这就是它给出输出 list

的原因
unlist((mapply(rnorm, n = sapply(group_split(data, study),nrow), mean=1:4*.1)))

-输出

[1]  0.3661374 -0.2767027  2.5413646 -0.6953391  0.1451225  0.4501413  0.8182433  0.0273765 -1.9239003 -0.8636144

dplyr,我们可以做

library(dplyr)
data %>% 
   group_by(study) %>% 
   mutate(new = rnorm(n(), mean = 1:4 * .1)) %>% 
   ungroup
# A tibble: 10 × 4
   study group outcome     new
   <int> <int> <chr>     <dbl>
 1     1     1 A        1.36  
 2     1     1 B       -0.126 
 3     1     2 A        1.63  
 4     1     2 B        1.67  
 5     2     1 A        0.515 
 6     2     1 B       -1.34  
 7     2     2 A       -0.629 
 8     2     2 B        0.105 
 9     3     1 B        0.0942
10     4     1 A        2.50