2012-02-22 13 views
44
a<-c(1,2,0,7,5) 

कुछ भाषाओं में एक पिकर-फ़ंक्शन है - a से एक यादृच्छिक संख्या चुनें - आर में कैसे?आर की सूची में यादृच्छिक तत्व का चयन करें?

+9

एक तरफ नोट: आपको लगता है कि आप आर के लिए नए हैं और शायद कुछ प्रारंभिक सामग्री को पढ़ना चाहिए। http://stackoverflow.com/questions/420296/what-are-some-good-books-web-resources-and-projects-for-learning-r – Dason

उत्तर

53
# Sample from the vector 'a' 1 element. 
sample(a, 1) 
+6

नमूना से सावधान रहें! यदि 'ए' की लंबाई 1 है, तो संख्यात्मक (is.numeric के अर्थ में) और 'a'> = 1 है, नमूना के माध्यम से नमूनाकरण' 1: ए' से होता है।ध्यान दें कि 'सुविधा' की लंबाई अलग होने पर इस सुविधा सुविधा से अवांछित व्यवहार हो सकता है। – pomber

4

पढ़ें this आर

http://blog.revolutionanalytics.com/2009/02/how-to-choose-a-random-number-in-r.html

में यादृच्छिक संख्या पैदा करने के बारे में लेख

आप इस मामले

sample(a, 1) 

दूसरा विशेषता दिखा रहा है कि आप केवल प्राप्त करना चाहते हैं में sample उपयोग कर सकते हैं एक यादृच्छिक संख्या। कुछ श्रेणी runif फ़ंक्शन के बीच संख्या उत्पन्न करने के लिए उपयोगी है। तथापि

sample(a,1) 

, अगर आप इस प्रक्रिया को कई बार दोहराना चाहते हैं, मान लीजिए कि आप एक पासा फेंकने की नकल करना चाहते हैं, तो आप जोड़ने की जरूरत:

18

ऊपर जवाब तकनीकी रूप से सही हैं

a<-c(1,2,3,4,5,6) 
sample(a, 12, replace=TRUE) 

उम्मीद है कि यह मदद करता है।

9

नमूना का उपयोग करते समय सावधान रहें!

sample(a, 1) अपने उदाहरण में वेक्टर के लिए अच्छा काम करता है, लेकिन जब वेक्टर लंबाई 1 यह अवांछित व्यवहार को जन्म दे सकती है, यह नमूने के लिए वेक्टर 1:a का प्रयोग करेंगे।

तो यदि आप एक अलग लंबाई वेक्टर से यादृच्छिक आइटम चुनने की कोशिश कर रहे हैं, तो लंबाई 1 के मामले की जांच करें!

sampleWithoutSurprises <- function(x) { 
    if (length(x) <= 1) { 
    return(x) 
    } else { 
    return(sample(x,1)) 
    } 
} 
+0

उन्हें इस बग को ठीक करना चाहिए। – skan

1

रनिफ़ का उपयोग करके वेक्टर से किसी आइटम का चयन करना एक विकल्प है। यानी

a <- c(1,2,0,7,5) 
a[runif(1,1,6)] 

चलें कहते हैं कि तुम एक समारोह है कि एक हर बार चलाया जाता है (उदाहरण के लिए एक सिमुलेशन में उपयोगी) उठाता है चाहता हूँ। तो

a <- c(1,2,0,7,5) 
sample_fun_a <- function() sample(a, 1) 
runif_fun_a <- function() a[runif(1,1,6)] 
microbenchmark::microbenchmark(sample_fun_a(), 
          runif_fun_a(), 
          times = 100000L) 

इकाई: नैनोसेकंड

sample_fun_a() - 4665

runif_fun_a() - 1400

runif इस उदाहरण में तेज हो रहा है।

0

यह विधि आपके वेक्टर की लम्बाई होने पर त्रुटि उत्पन्न नहीं करती है, और यह आसान है।

a[sample(1:length(a),1)] 
संबंधित मुद्दे