R генерирует случайные данные из нескольких распределений, используя kwargs - PullRequest
1 голос
/ 06 января 2020

Вопрос:

Я хочу сгенерировать случайную выборку из нескольких распределений, например, norm, pois et c. Однако я хочу указать параметры для функции rdist, например, передать параметры вызову функции.

Попытка:

Я пытался сделать то, что сделал в python partial или **kwargs

dist = 'rnorm' # dist
n = 100 # sample size
para1 = c(0,1) # parameters
mean(get(dist)(n,para1)) # it fails

para2 = c(mean = 0, sd = 1)# parameters
mean(get(dist)(n,para2)) # it fails

Выход:

[1] 0.6318898
[2] 0.4246129

Как видно из вывода, rnorm не производил выборки из norm(mean = 0,sd = 1), потому что выборочное среднее составляет около 0,5. Выходные звуки генерируются из rnorm(1,mean = 0,sd = 1) и rnorm(1,mean = 1, sd =1) один за другим.

1 Ответ

1 голос
/ 06 января 2020

Вы можете использовать do.call для вызова функции в качестве имени символа и передачи аргументов функции в списке (см. Также ?do.call):

## sample from standard normal
(X <- do.call("rnorm", args = list(n = 10, mean = 0, sd = 1)))
#>  [1]  1.4127136 -0.4113396  1.7546034  0.6741983 -1.3499156 -0.8033819
#>  [7] -1.6393473 -0.7667389  0.7157213 -1.1061452

mean(X)
#> [1] -0.1519632
...