我在这里有一个取样的函数,但是它有效但是我很难将样本存储在一个向量中,以便我可以绘制它们;这是我的功能如下:
{{1}}
我尝试用
创建一个0的向量{{1}}
然后以某种方式填写这些0的样本,但它不起作用。
如果有人可以协助将我的print(x)值存储在矢量中,我会很高兴
答案 0 :(得分:1)
您需要创建一个列表来存储x的所有迭代。然后你需要调用所需的函数来获取这些值,即这里xx将存储结果。正如Roland所建议的那样,在R中增加一个列表是一个非常缓慢的操作。你应该尽可能使用矢量化方法。
InvCDF = function(n, sd) {
x=list()
for (i in 1:n) {
u=runif(1, min = 0, max = 1)
x[[i]] = sqrt(-2*(sd^2)*log(1-u))
}
unlist(x)
}
xx=InvCDF(100,19)
您可以预定义矢量并在循环中使用它。这比列表操作要快得多。
x <- numeric(n)
InvCDF = function(n, sd) {
for (i in 1:n) {
u=runif(1, min = 0, max = 1)
x[i] = sqrt(-2*(sd^2)*log(1-u))
}
x
}
答案 1 :(得分:1)
这里确实没有必要使用循环。 runif
被矢量化为sqrt
,log
等。
InvCDF = function(n, sd) {
u <- runif(n, 0, 1)
sqrt(-2*(sd^2)*log(1-u))
}
set.seed(1) # for reproducibility
InvCDF(5, 1)
#[1] 0.7855916 0.9647926 1.3043220 2.1855104 0.6711903