使用tidyverse

时间:2017-09-24 04:38:21

标签: r tidyverse

我有一个名为theta的变量列表,想要使用每个theta绘制n个随机变量。

S = 5
n = 5
test = tibble(
      s = 1:S,
      theta = rgamma(S, shape = 10*s, rate = 50)
    ) %>% 
      mutate(data = rexp(n, theta))

理想情况下,我希望我的结果是这样的:

S theta          data
1 some value     [a list with n number]
...

然后将其扩展为tibble:

S theta d1 d2 d3 .. dn
...

希望这很清楚。 感谢。

1 个答案:

答案 0 :(得分:2)

如果我们需要list,那么我们可以使用map来遍历' theta'并在rexp

中获取list
library(tidyverse)
test1 <- test %>% 
            pull(theta) %>%
            map(~rexp(n, .)) %>% 
            mutate(test, data = .)
str(test1$data)
#List of 5
# $ : num [1:5] 5.88 7.94 1.64 3.3 11.25
# $ : num [1:5] 4.5942 0.5424 1.7479 0.0469 0.9573
# $ : num [1:5] 1.192 2.447 0.239 1.497 2.359
# $ : num [1:5] 1.2323 0.0996 1.5778 0.1278 0.6982
# $ : num [1:5] 0.15 0.733 0.19 3.548 2.08

list列可以unnest编辑

test1 %>%
      unnest(data)

数据

S <- 5
n <- 5

test <- tibble(
  s = 1:S,
  theta = rgamma(S, shape = 10*s, rate = 50)
)