作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试加快创建包含两个向量之间所有可能组合的表格。当我们使用 expand.grid()
时,我们可以从 base R
获得这个功能。但是,我想知道我们是否可以使用 {collapse}
包中的工具更快地完成相同的结果。
关于这个主题有一个 StackOverflow 线程 here .但是,即使我们采用最快的解决方案,但在以下情况下它还是最慢的。尽管 tidyr::expand_grid()
比基础 R 更快,我仍然希望利用 collapse
包我们可以获得更快的处理时间。
#library(collapse)
#library(tidyr)
library(babynames)
year <- collapse::funique(babynames$year, sort = TRUE)
names <- collapse::funique(babynames$name)
expand.grid.jc <- function(seq1,seq2) { ## from https://stackoverflow.com/a/10407457/6105259
as.data.frame(cbind(Var1 = rep.int(seq1, length(seq2)),
Var2 = rep.int(seq2, rep.int(length(seq1),length(seq2)))))
}
my_benchmarking <-
bench::mark(base = expand.grid(year, names),
jc = expand.grid.jc(year, names),
tidyr = tidyr::expand_grid(year, names), check = FALSE, iterations = 10)
#> Warning: Some expressions had a GC in every iteration; so filtering is disabled.
my_benchmarking
#> # A tibble: 3 x 6
#> expression min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl>
#> 1 base 965.3ms 1.06s 0.938 701MB 2.35
#> 2 jc 13.1s 13.39s 0.0747 820MB 0.120
#> 3 tidyr 541.2ms 656.71ms 1.55 316MB 1.24
由 reprex package 创建于 2021-08-22 (v2.0.0)
很高兴了解是否可以更快地计算此任务。
最佳答案
你可以试试data.table::CJ
函数。
bench::mark(base = expand.grid(year, names),
jc = expand.grid.jc(year, names),
tidyr1 = tidyr::expand_grid(year, names),
tidyr2 = tidyr::crossing(year, names),
dt = data.table::CJ(year, names),
check = FALSE, iterations = 10)
# expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc total_time result memory time gc
# <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl> <int> <dbl> <bch:tm> <list> <list> <list> <lis>
#1 base 635.48ms 715.02ms 1.25 699MB 2.00 10 16 8.02s <NULL> <Rprof… <benc… <tib…
#2 jc 5.66s 5.76s 0.172 820MB 0.275 10 16 58.13s <NULL> <Rprof… <benc… <tib…
#3 tidyr1 195.03ms 268.97ms 4.01 308MB 2.00 10 5 2.5s <NULL> <Rprof… <benc… <tib…
#4 tidyr2 590.91ms 748.35ms 1.31 312MB 0.656 10 5 7.62s <NULL> <Rprof… <benc… <tib…
#5 dt 318.1ms 384.21ms 2.47 206MB 0.986 10 4 4.06s <NULL> <Rprof… <benc… <tib…
PS - 还包括 tidyr::crossing
以进行比较,因为它做同样的事情。
关于r - 如何在 R 中加速 `expand.grid()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68880025/
我和我的 friend 正在使用 turtle 开发 Python 游戏。我们的问题在定义 turtle 的部分。我们正在尝试加快每只 turtle 的速度,但当我们这样做时,默认速度运行。为什么会出
我是一名优秀的程序员,十分优秀!