2010-05-20 7 views
7

..or मैं देने के लिएक्या एन ऑब्जेक्ट्स के क्रमपरिवर्तनों की संख्या प्राप्त करने के लिए कोई आर फ़ंक्शन है पी (एन, के)?

P.nk <- factorial(n)/factorial(n-k) 

या

P.nk <- choose(n,k) * factorial(k) 

धन्यवाद है।

+1

के रूप में अन्य लोगों ने कहा, वहाँ gregmisc में एक सीधी क्रमपरिवर्तन समारोह है (नई पार्स gregmisc संकुल में gtools) । लेकिन, मैंने पाया है कि अन्य सभी पैकेज फ़ंक्शंस वास्तव में क्रमपरिवर्तन उत्पन्न करने के लिए हैं, न केवल क्रमपरिवर्तन की कुल संख्या देने के लिए। इसलिए, वे धीमे होते हैं। मैंने पहले ऐसे कार्यों को बेंचमार्क किया है। आपका विकल्प 2 यहां पाया गया है कि किसी भी पैकेज फ़ंक्शंस की तुलना में तेज़, तेज़, तेज़ और दूर है। आपके पहले विकल्प की तुलना में इसकी गणना के लिए उच्च ऊपरी सीमा भी है। – John

+0

उपयोगी जानकारी के लिए धन्यवाद – Brani

उत्तर

8

मुझे किसी मौजूदा कार्य के बारे में पता नहीं है। आपका पहला सुझाव बड़े एन के साथ असफल हो जाएगा। आपकी दूसरी विचार ठीक काम करना चाहिए जब एक समारोह के रूप में लिखा:

perm <- function(n,k){choose(n,k) * factorial(k)} 

फिर perm(500,2) उदाहरण के लिए 249,500 दे देंगे।

+0

पहला सुझाव 'exp (lfactorial (n) - lfactorial (n-k)) के रूप में पुनः लिखा जा सकता है। लेकिन मैं दूसरा भी इस्तेमाल करूंगा। – Marek

3

मुझे लगता है कि gregmisc पैकेज इन कार्यों को प्रदान करता है।

library(gregmisc) 
permutations(n=4,r=4) 

मेलिंग सूची संदर्भ: [R] permutation

+1

दरअसल, जो पूछा जाता है, उसे दिया जाएगा: मंद (क्रमपरिवर्तन (एन, के)) [1] –

1

'समस्या' पैकेज में बाहर nsamp(n,k,ordered=T) चेक

+0

'एनएसएम्प (500,2, आदेश दिया गया = TRUE) 'रोब उत्तर में मुठभेड़ समस्या स्थिति (' सीमा से बाहर मूल्य ') । – Marek

संबंधित मुद्दे