R - dplyr bootstrap 几个变量

R - dplyr bootstrap several variables

我正在尝试 bootstrapingdplyr,我被一行简单的代码卡住了。

使用函数 bootstrap,我发现 out 可以做到

library(dplyr)
library(broom)

mtcars %>% bootstrap(10) %>% 
  do(tidy(sample(.$cyl, 2)))

获得一个很好的直接输出

   replicate     x
         (int) (dbl)
1          1     6
2          1     8
3          2     6
4          2     8
...

不过,如果能获得更多变量(列)就好了,但我不知道怎么做。

我想

mtcars %>% bootstrap(10) %>% 
  do(tidy(sample(., 2)))

mtcars %>% bootstrap(10) %>% 
  do(tidy(sample_n(2)))

会起作用,但不会。

知道如何对多个变量进行子集化吗?

假设我想得到 mpgcyldisp 来得到类似 (输出)

   replicate   cyl   mpg  disp
        (int) (dbl)
1          1     6   21  ...
2          1     4   22  ...
3          2     6   ... 
4          2     8   ...
...

(我随机选择两种情况sample = 2,我重复这个例程(bootstrap)10次)

正在使用

set.seed(123)
sapply(mtcars, function(v) sample(v,2))

您可以从 mtcars 的每一列中抽取 2 个值,但是这些列的抽样 彼此独立 (不确定这是否是您想要的 and/or 这是有道理的)。因此,使用 broom 的解决方案可能是:

mtcars %>%
    bootstrap(10) %>%
    do(tidy(sapply(., function(v) sample(v,2))))

另一方面,如果保留列之间的关系很重要,您可以使用类似

的东西
do.call("rbind",lapply(1:10, function(dum) mtcars[sample.int(nrow(mtcars), 2), ]))