R 创建随机数的向量(运行时向量大小未知)

R 创建随机数的向量(运行时向量大小未知),r,R,我正在编写一个蒙特卡罗模拟程序,它应该给用户一些灵活性。因此,我希望用户能够指定 模拟运行前随机数的具体概率分布。然而,此时用户不知道 需要多少个随机数 我现在的想法是从用户那里获取一个call对象,该对象创建一个随机数,然后根据内部需要创建任意多个随机数。然而, 除了一个循环,我无法得到任何其他的解决方案,但有一种感觉,这是因为我错过了一些东西。所以基本上,我有 两个问题: 1) 调用对象的想法好吗?我仍然在做这个项目,所以我仍然可以改变设置,但我需要一个非常直观的方法 用户的解决方案 2)

我正在编写一个蒙特卡罗模拟程序,它应该给用户一些灵活性。因此,我希望用户能够指定 模拟运行前随机数的具体概率分布。然而,此时用户不知道 需要多少个随机数

我现在的想法是从用户那里获取一个call对象,该对象创建一个随机数,然后根据内部需要创建任意多个随机数。然而, 除了一个循环,我无法得到任何其他的解决方案,但有一种感觉,这是因为我错过了一些东西。所以基本上,我有 两个问题:

1) 调用对象的想法好吗?我仍然在做这个项目,所以我仍然可以改变设置,但我需要一个非常直观的方法 用户的解决方案

2) 如果这是一个好主意,是否有更优雅的方法将随机数扩展为大小为NRMC的向量

让我们举个例子:

#That's what I would get from the user with my current set-up:
rnd_call <- call("rnorm", 1, mean=0.1, sd=0.01)
#To create nrMCS random numbers, that's my best shot so far:
nrMCS <- 100
rnd_vec <- as.numeric(nrMCS)
for (i in 1:nrMCS){rnd_vec[i] <- eval(rnd_call)}
rnd_vec
[1] 0.09695170 0.11752132 0.11548925 0.11205948 0.10657986 0.12017120 0.09518435
...
#Question: Is there are more elegant way?
#I tried the following, but it fails for certain reasons
rep(eval(rnd_call), nrMCS) #DOES NOT WORK: Repeats ONE random number
[1] 0.1105464 0.1105464 0.1105464 0.1105464 0.1105464 0.1105464 0.1105464 0.1105464 
...
eval(rep(rnd_call, nrMCS)) #DOES NOT WORK
Error in rnorm(1, mean = 0.1, sd = 0.01, rnorm, 1, mean = 0.1, sd = 0.01,  : 
formal argument "mean" matched by multiple actual arguments
#这就是我从用户那里获得的当前设置:

rnd_call我认为更惯用的方法是使用
r*
函数和参数列表。只要您可以避免调用
eval
,您就应该。大概是这样的:

rnd_fun <- rnorm
rnd_args <- list(mean=0.1,sd=0.01)
nrMCS <- 100
rnd_vec <- do.call(rnd_fun,c(list(n=nrMCS),rnd_args))
要想做你想做的事(尽管我认为下面的解决方案更好),你应该使用
replicate(nrMCS,eval(rnd_call))
而不是
rep(…)
library(rbenchmark)
nrMCS <- 10000
benchmark(single_call=do.call(rnd_fun,c(list(n=nrMCS),rnd_args)),
           mult_call=replicate(nrMCS,do.call(rnd_fun,c(list(n=1),rnd_args))))
         test replications elapsed relative user.self sys.self 
2   mult_call          100  11.135 91.27049    11.084    0.004 
1 single_call          100   0.122  1.00000     0.080    0.036