1

我发现使用这样的boot

library(boot)

calculate_mean_1 <- function(.data, i){
  mean(.data$mpg[i])
}

system.time(
  samples_1 <- boot(mtcars, statistic = calculate_mean_1, R=10000)$t
)

rsample我可以比使用包快 10 倍以上创建引导示例:

library(tidyverse)
library(rsample)

calculate_mean_2 <- function(.data) {
  mean(analysis(.data)$mpg)
}

system.time(
  samples_2 <- bootstraps(mtcars, times = 10000) %>% 
    mutate(m = map_dbl(splits, calculate_mean_2))
)

我想知道我是否rsample正确使用。

4

2 回答 2

2

看起来你做对了。我认为不同之处在于rsample使用列表而不是标准向量。这样做的好处rsample是您可以在同一次运行中计算多个统计信息,因此如果这样做,您可能会获得一些时间(并使代码更易于阅读)。

于 2020-03-19T18:50:01.793 回答
0

为了缩小性能差距,请考虑从数据帧的子集中绘制引导样本。

system.time(
  samples_3 <- bootstraps(mtcars %>% dplyr::select(mpg), times = 10000) %>% 
    mutate(m = map_dbl(splits, calculate_mean_2))
)

于 2021-01-09T02:21:38.827 回答