存储函数导致向量

时间:2016-11-21 11:37:46

标签: r function vector sampling storing-data

我在这里有一个取样的函数,但是它有效但是我很难将样本存储在一个向量中,以便我可以绘制它们;这是我的功能如下:

{{1}}

我尝试用

创建一个0的向量
{{1}}

然后以某种方式填写这些0的样本,但它不起作用。

如果有人可以协助将我的print(x)值存储在矢量中,我会很高兴

2 个答案:

答案 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被矢量化为sqrtlog等。

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