【发布时间】:2012-01-22 02:20:59
【问题描述】:
我有一个包含 12 个对象的数组。每一个都是一个字母。我想生成 4、5、6、7 和 8 个字母的所有组合。
首先我只是使用gregmisc 包生成排列:
sapply(4:8, function(x) permutations(n = 12, r = x)) -> perms
然后我想获取名为letters.split 的对象数组,并且我想创建所有组合。所以我走了:
unlist(lapply(perms, a <- function (x){
apply(x, 1, function(y) letters.split[y])
})) -> combos
这似乎在计算上效率很低..需要一段时间。必须有更好的方法在索引处使用排列组合。排列函数并不是真正让我感到困扰的,因为我只需要这样做,然后我就可以保存它。
我想问是否有这样做的矢量化方式,但我实际上并不知道这意味着什么,所以简单地解释一下矢量化函数的简单术语将不胜感激。
【问题讨论】:
-
我不完全清楚你在问什么,虽然看起来你可能只是想重新创建
combn函数? -
第二步看起来没有必要:
permutations函数有一个v参数,可以直接置换您的数据,而无需考虑索引:lapply( 4:6, permutations, n=8, v=LETTERS[1:12] )。 -
问“什么是向量化函数?”在一个新问题中。
标签: r vectorization permutation