如何使用参数作为R中的列表从不同的统计分布生成随机样本?

为了从统计分布中生成随机样本,我们根据其名称对相应的分布使用rnorm,rbinom,rexp,rpois等函数。使用这些函数,我们可以将它们的参数作为参数传递给函数内部。但是,如果我们将参数另存为列表,那么随机样本的生成就不那么直接了,为此,我们需要使用do.call函数。

例子

parameters1<-list(mean=1,sd=0.5)
do.call(rnorm,c(list(n=50),parameters1))

输出结果

[1] 0.7544844 -0.1545844 1.5028693 0.6453996 0.6559957 1.5127857
[7]  0.8576135 0.3896411 1.0906517 0.9305543 1.0028821 1.1926402
[13] 0.8146700 1.3221883 0.8897567 1.1658910 1.5484195 1.2175907
[19] 0.8370342 1.5744038 1.4967519 1.2741985 1.1193659 0.6860470
[25] 1.6803262 0.6998702 2.0936665 1.7663053 0.8821498 0.4867895
[31] 0.6447967 1.1284419 0.8766541 0.8262287 0.5241907 0.9774861
[37] 0.6075478 0.1660290 0.8098867 1.4594983 0.7123265 1.3039822
[43] 0.1910586 0.9722190 1.2597036 1.1505767 1.0528381 0.6796470
[49] 0.5751478 0.4879356

示例

parameters2 <-list(size=20,p=0.5)
do.call(rbinom,c(list(n=50),parameters2))

输出结果

[1] 10 7 10 8 10 9 15 9 8 11 8 14 10 8 11 15 11 10 9 12 8 8 13 9 9
[26] 12 8 5 9 10 10 9 12 10 10 14 12 8 9 14 10 12 9 12 10 13 8 9 7 8

示例

parameters3 <-list(lambda=5)
do.call(rpois,c(list(n=50),parameters3))

输出结果

[1] 10 4 6 7 2 3 4 2 2 11 10 3 8 5 4 5 6 2 4 6 4 7 3 5 4
[26] 3 9 4 5 1 5 6 5 4 8 6 4 4 3 7 9 5 4 12 3 5 2 5 2 3

示例

parameters4 <-list(min=2,max=10)
do.call(runif,c(list(n=50),parameters4))

输出结果

[1] 4.263943 6.670979 7.853661 3.324167 8.931742 7.668593 8.083196 3.176673
[9] 4.864456 7.386660 6.190581 4.798414 3.924246 2.465534 3.892958 9.120623
[17] 8.494619 7.980131 3.239294 2.997937 9.797806 5.489040 5.712133 3.322385
[25] 6.679492 4.166224 3.840775 7.529663 4.262819 8.483185 2.751333 8.576241
[33] 5.419426 8.047098 7.299084 5.556219 7.017169 2.003723 3.737948 7.638978
[41] 3.721332 8.511470 4.462111 7.501941 9.461449 2.926237 3.021646 7.425791
[49] 5.431589 8.675208

示例

parameters5 <-list(rate=1)
do.call(rexp,c(list(n=50),parameters5))

输出结果

[1] 0.048859236 2.470484229 0.034337427 0.573854705 1.107571484 1.158912960
[7] 0.841547703 2.359008139 1.154964259 1.810404878 0.072107441 0.007897424
[13] 0.236585886 2.399940448 0.274251057 1.760241609 0.736572850 0.630162990
[19] 0.897717278 1.151831293 0.941598348 2.968427598 0.037609847 0.358026831
[25] 0.017693759 0.904697679 0.309862433 0.632956278 3.036563054 0.478063371
[31] 1.088025155 0.658501647 0.071082783 0.791328635 0.601896424 2.545756658
[37] 0.664215548 0.800567470 0.506220199 0.056468316 0.604476434 1.233841599
[43] 1.003536777 2.025803985 0.138765325 0.367169829 0.331470285 0.059784917
[49] 0.019685799 3.500006681