R中15个数字的排列

时间:2013-03-20 17:11:52

标签: c r

我需要计算R中15个数字的变化,范围从1到15。

library(combinat)
#With 1 to 3
permn(3)
#With 1 to 10
options(max.print=factorial(10))
permn(10)

考虑到排列的数量,上面的代码(10)只需要5分钟就可以得到我需要的东西(但我对速度并不感兴趣)。

但是我需要用15个数字(1到15)来做这个。不幸的是,当我尝试时,R会返回错误:

permn(15)
  Error in vector("list", gamma(n + 1)) : 
  vector size specified is too large

编辑 这可以分阶段完成吗? 我正在使用它来重新排序数据集,然后进行一些计算,所以我可以分阶段完成这项工作,例如先进行300,000次排列,应用计算然后进行下一次300,000次排列等。换句话说,计算x排列然后在循环中根据第一个排列重新排序数据集列,进行一些计算,然后对第二个排列等进行相同的操作。

你知道这方面有什么办法吗?是否值得使用一些C代码? 我找到了几个例子(例如12),但我不知道C是如何工作的。我无法使用R(可能因为我不明白C代码在做什么)。

我已经安装了Rccp,Rtools并尝试了简单的cppFunction示例,它们工作正常,但我没有得到任何字符串排列(当我试图在上面的链接中包含代码时,我得到错误错误sourceCpp(code = code,env = env,rebuild = rebuild,showOutput = showOutput,:)。正是因为我不理解C代码,向你展示我运行的代码可能毫无意义(这很可能是错误的)。

有人会告诉我如何从R运行上面的(或更好的)C代码,或者你在R中有什么方法吗?

非常感谢

注意:我转发了这个,因为我改变了排列的数量并从字符串转移到了数字。我还添加了一些关于我需要做什么的细节。

1 个答案:

答案 0 :(得分:3)

真正的问题是15!=1,307,674,368,000。这只是要迭代的太多列表,更不用说存储在内存中了。

如果我们为了论证而假设permn(15)的每次迭代与permn(10)的一次迭代相同,而后者总共花费5分钟,那么你看的是3。4年计算时间。

这称为combinatorial explosion