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
是否有一个 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