如何从R向量中选择随机元素?

从R向量中随机选择元素可确保无偏选择,因为在进行随机选择时,向量中的每个元素都具有由随机选择过程(特别是简单的随机采样选择过程)选择的相等概率。要从R向量中随机选择一个或多个元素,我们可以使用样本函数。

示例

> x1<-1:50
> x1
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
> sample(x1,1)
[1] 42
> sample(x1,5)
[1] 6 24 32 14 2
> sample(x1,10)
[1] 45 18 22 14 38 1 40 6 23 43
> sample(x1,10,replace=TRUE)
[1] 40 39 11 17 36 13 40 25 48 25
> sample(x1,100,replace=TRUE)
 [1] 23 46 20 39 29 13 22 29 28 44 48 33 45 21 31 38 17  9 39 23 19 50 26 48 43
[26] 30 42 32 39 29 34 10  1 43 26 15 29 24 42 48 12 39 24 28 22 40 33 19 26 35
[51] 43  1 29 14 22  6 28 41 37 46 49  3 22 35  7 46 35 44 49 41 50 49 50 47 27
[76]  7 47 20 24 16 19 36  2 48  1 44 39 41 13 26 34  2 19 17 34 11 31 35 35 46
> sample(x1,500,replace=TRUE)
  [1] 19 45 11 16 40  9 50 28 24 10 15 37 32 37 39 31 37 29 12 14 38 16 15  2  1
 [26]  3  9 38 17 20  5 41 27 44 31  8 36 49 41 29 21  1 20 42 46 42 24 22 38 50
 [51] 16 30 29  2  8 14 36 26 40 37  8  7 36 49 42 36  9 27 41 15 38  6  4 35 35
 [76] 13 41  7 25 31 46 37 28 39 28 20 29 42 40  1 28 14 31 12 29 16 44 10 34 26
[101] 49 33  4 22 25 24 37 44 15 14 47 17 47 18 33 32  8 42 39  7 27 43 50  9 20
[126] 34 37 29 11  2  3 47 38 41 15 28  5 28 14 37 43 43 17  1 26 45 33 19 26 23
[151]  4 16 49 27 39 38 16 34 29 45 35 10  6 39 49 33 23 33 35 11 13 50 37 26 26
[176] 48 40 34  4 25 38 17 24  9 45 46 30  9 11 22 32 40  3 19 33  4 13  1 40  5
[201] 42 44 35 23 29 35 36  9 35 35 20 22 41 22 19 44 18 44 39 29 27 36 32 31 17
[226] 37 25  9 21 21 15 37 24 14  7 27 26 30 45 15 50  6 34 21  1 17 13 45 26 40
[251]  2 41  8 25 31 20 46 20  5 10 44 20 15 29  2  1  5 25 37 32 40 13 25  4 42
[276] 38 50  5  1 38 46 13  8 49 19 48 47 28 48 49 46 38 11  8 23 20  5  2  5 12
[301]  3 26 50 14 13 31 47 34 30 26 45 48  7 48 27 49 43  9  8 22 45  6 48 27 44
[326] 30 10 30  1  6 17 13 26  2 32 47 36 44  5 23 38 20 28 28 12 35  4 47 46 26
[351] 13  3 46 15 34 38 48  4 26 21 21 46 16 37 24 21  3 26 23 36 49 22 47  3 48
[376] 48  4 36 37  1 47 37 22 21 27 11 44 11  6 48 36  6 20 40 33 40 11 11 21 21
[401] 17  9 18 31 44  8 23  6 11 37 25  2 39 32 42 40 22 35 11 13  2 40  6 15 41
[426] 28  1  2  9 49  5 27 42 29  2 37 31 14 25 21 23  6 48 21  5 25 17 33 40 19
[451] 17 20 23 20 48 49 31  5 27 33  1 29 34 36 20 21 38 24 34 47 20 50  3 20 34
[476] 15 30 42 13 16 43 36 48 30 47 29 28 13 48  7 18  1  4  5 46 36 34 26 33 19
> sample(x1,500,replace=FALSE)
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'

在这里,由于向量x1的大小不大于样本大小500而导致错误。如果要创建一个比可用向量大的向量,则必须放置条件“ replace = TRUE”。或者我们可以从一个比原始向量大的向量中创建更大的向量,如下所示:

> x2<-1:5000
> sample(x2,200,replace=FALSE)
[1]  1716 3437 582 576 1817 3114 225 2956 3060 185 2841 2426 4609 4083 245
[16] 1057 3679 2888 3842 4711 2928 450 665 1670 614 3313 1090 1249 3715 1798
[31] 4836 4589 4596 2403 39 3833 1552 3176 721 4754 1961 1432 386 2955 4910
[46] 4460 4896 1044 2843 327 4039 3800 1311 3330 837 1205 3565 3237 1768 4038
[61] 2296 435 1693 3316 1852 838 3212 2490 4474 4703 4649 4630 3977 3878 556
[76] 3322 3003 4346 306 2435 945 2772 4826 1279 749 4286 224 2507 4220 3448
[91] 2095 3268 219 4904 626 4360 2765 2240 4588 4105 3721 534 3022 2423 1838
[106] 1526 2389 401 3279 4780 3929 34 3728 116 2046 3288 2751 877 2374 347
[121] 3984 1302 3755 4178 571 4866 855 3580 4688 4385 2672 1882 2206 68 4618
[136] 823 173 391 2350 505 4475 3983 2289 3444 3553 935 1316 3327 4894 3936
[151] 2878 2408 2438 90 2836 1623 1514 4473 2600 2499 1689 3510 3733 1954 3387
[166] 4142 4344 1511 773 3524 3375 3650 2145 40 41 4239 113 3890 4651 3152
[181] 2255 3158 133 2690 4211 1641 4527 794 4111 4387 4612 1813 3159 2705 1830
[196] 1359 1581 2904 4778 2579