如何从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