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

Max*_*ler 26 combinations r

我刚开始学习概率,我正在寻找可以在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)
Run Code Online (Sandbox Code Playgroud)

CCC*_*CCC 31

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

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

comb = function(n, x) {
  factorial(n) / factorial(n-x) / factorial(x)
}
Run Code Online (Sandbox Code Playgroud)

  • 这在数字上是个坏主意.R可以评估`选择(500,2)`而不是'因子(500)`.你应该至少使用`lfactorial`然后使用`exp()`.我发布这个的唯一原因是你的答案有这么多的赞成,似乎人们不知道这些事情...... (14认同)

Sha*_*ane 29

您可以使用combinatR 2.13包:

install.packages("combinat")
require(combinat)
permn(3)
combn(3, 2)
Run Code Online (Sandbox Code Playgroud)

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

length(permn(3))
dim(combn(3,2))[2]
Run Code Online (Sandbox Code Playgroud)

  • @MaximVeksler看看`choose`.(`choose(5,2)== ncol(combn(5,2))`) (14认同)

Pet*_*ont 26

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

选择也已在特殊{base}中提供

  • 对于一个简单的问题很麻烦,它的回答是3个单词"选择功能" (7认同)
  • 选择(n,k) = nCk (2认同)