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

Một số ngôn ngữ có nút chọn - chức năng - chọn một số ngẫu nhiên từ a - cách thức trong R?Chọn phần tử ngẫu nhiên trong danh sách R?

+9

Lưu ý: Bạn có vẻ như chỉ mới đọc một số tài liệu giới thiệu. http://stackoverflow.com/questions/420296/what-are-some-good-books-web-resources-and-projects-for-learning-r – Dason

Trả lời

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

Hãy cẩn thận với mẫu! Nếu 'a' có độ dài 1, là số (theo nghĩa is.numeric) và' a'> = 1, lấy mẫu qua mẫu diễn ra từ '1: a'.Lưu ý rằng tính năng tiện lợi này có thể dẫn đến hành vi không mong muốn khi 'a' có độ dài khác nhau. – pomber

18

câu trả lời ở trên là chính xác về mặt kỹ thuật:

sample(a,1) 

tuy nhiên, nếu bạn muốn lặp lại quá trình này nhiều lần, giả sử bạn muốn bắt chước ném một con xúc xắc, sau đó bạn cần phải thêm:

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

Hy vọng điều đó sẽ hữu ích.

9

Hãy cẩn thận khi sử dụng mẫu!

sample(a, 1) hoạt động tốt cho vectơ trong ví dụ của bạn, nhưng khi vectơ có độ dài 1 có thể dẫn đến hành vi không mong muốn, nó sẽ sử dụng véc tơ 1:a để lấy mẫu.

Vì vậy, nếu bạn đang cố gắng chọn một mục ngẫu nhiên từ một vector có độ dài thay đổi, hãy kiểm tra trường hợp có độ dài 1!

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

Họ nên sửa lỗi này. – skan

1

Cách khác là chọn một mục từ véc tơ sử dụng runif. ví dụ:

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

Cho phép nói rằng bạn muốn một hàm chọn mỗi lần nó chạy (hữu ích trong mô phỏng ví dụ). Vì vậy,

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) 

Đơn vị: nano giây

sample_fun_a() - 4665

runif_fun_a() - 1400

runif có vẻ là nhanh hơn trong ví dụ này.

0

Phương pháp này không tạo ra lỗi khi vectơ của bạn dài và đơn giản.

a[sample(1:length(a),1)] 
Các vấn đề liên quan