如何计算R中的组合和排列?

时间:2011-10-26 16:41:57

标签: r combinations

我刚开始学习概率,我正在寻找可以在linux上使用的工具。

我找到了一些组合包http://rss.acs.unt.edu/Rdoc/library/Combinations/html/00Index.html但是当我尝试安装它们时,该过程失败并显示以下消息:

> install.packages("Combinations")
Installing package(s) into ‘/home/maxim/R/x86_64-pc-linux-gnu-library/2.13’
(as ‘lib’ is unspecified)
Warning message:
In getDependencies(pkgs, dependencies, available, lib) :
  package ‘Combinations’ is not available (for R version 2.13.1)

6 个答案:

答案 0 :(得分:28)

如果您不希望代码依赖于其他软件包,您可以随时编写这些函数:

perm = function(n, x) {
  factorial(n) / factorial(n-x)
}

comb = function(n, x) {
  factorial(n) / factorial(n-x) / factorial(x)
}

答案 1 :(得分:27)

您可以将combinat包用于R 2.13:

install.packages("combinat")
require(combinat)
permn(3)
combn(3, 2)

如果您想知道组合/排列的数量,请检查结果的大小,例如:

length(permn(3))
dim(combn(3,2))[2]

答案 2 :(得分:21)

函数combn位于标准的utils包中(即已安装)

choose也已在Special {base}

中提供

答案 3 :(得分:3)

Combinations包不是标准CRAN包的一部分,而是另一个存储库的一部分,omegahat。要安装它,您需要使用

install.packages("Combinations", repos = "http://www.omegahat.org/R")

请参阅http://www.omegahat.org/Combinations/

上的文档

答案 4 :(得分:1)

可能是包“组合”不再更新,并且不适用于最新版本的R(我也无法在Windows上的R 2.13.1上安装它)。 “combinat”软件包对我来说没有任何问题,可能是一个解决方案,具体取决于你想要做什么。

答案 5 :(得分:0)

上述几种解决方案涉及旨在列出实际组合的函数,然后应用长度函数来执行计算。如果您只想要数字,这是非常低效的。 ncol(combn(1:70,5)) 在我的系统中使用 rstudio.cloud 大约需要 10 秒。选择(70,5)不到一秒钟。

正如 Marius Hofert 指出的,像 factorial(500) 这样的表达式在数值上存在问题。

不使用非标准库,我相信选择(n,k)是组合的最佳解决方案。我所知道的最好的排列是选择(n,k)*阶乘(k),但如果有人知道获得排列的直接方法,请分享。