相关疑难解决方法(0)

使用outer而不是expand.grid

我正在寻找尽可能快的速度,并留在基地做什么expand.grid.我过去曾outer用于类似的目的来创建一个向量; 这样的事情:

v <- outer(letters, LETTERS, paste0)
unlist(v[lower.tri(v)])
Run Code Online (Sandbox Code Playgroud)

基准测试表明我outer可以快得多,expand.grid但这次我想创建两个列,就像expand.grid(2个向量的所有可能的组合)一样,但是我的方法outer与外部这个时候没有基准.

我希望采用2个向量并尽可能快地创建每个可能的组合作为两列(我认为outer可能是路线,但对任何基本方法都是敞开的.

这是expand.grid方法和outer方法.

dat <- cbind(mtcars, mtcars, mtcars)

expand.grid(seq_len(nrow(dat)), seq_len(ncol(dat)))

FOO <- function(x, y) paste(x, y, sep=":")
x <- outer(seq_len(nrow(dat)), seq_len(ncol(dat)), FOO)
apply(do.call("rbind", strsplit(x, ":")), 2, as.integer)
Run Code Online (Sandbox Code Playgroud)

微基准测试显示outer较慢:

#     expr      min        lq    median        uq      max
# EXPAND.G  812.743  838.6375  894.6245  927.7505 27029.54
#    OUTER 5107.871 5198.3835 5329.4860 5605.2215 27559.08
Run Code Online (Sandbox Code Playgroud)

我认为我的outer使用很慢,因为我不知道如何使用 …

r

21
推荐指数
3
解决办法
5613
查看次数

R:具有/不具有替换的排列和组合以及用于不同/非独特项目/多集的排列和组合

在这个主题中,我试图在这里包括所有常见问题及其答案.我希望这对某人有用.

一般问题:如何rn对象生成对象序列?

  • 组合与排列.
  • 有替换和没有替换.
  • 不同的项目与非独特的项目(多重集合).

总共存在这类2^3=8问题.

[更新]

Josh O'Brien认为这8个问题与十二种方式有关.实际上,"不同"的问题以十二种方式包含在内,而"非独特"的问题则不包括在内.无论如何,将这里的8个问题与12倍的方式进行比较是很有趣的.请参阅注释以获取进一步的读数.

combinations r permutation multiset r-faq

21
推荐指数
2
解决办法
1万
查看次数

标签 统计

r ×2

combinations ×1

multiset ×1

permutation ×1

r-faq ×1