【问题标题】:R: Sample a vector with replacement multiple timesR:多次对带有替换的向量进行采样
【发布时间】:2012-04-21 23:43:46
【问题描述】:

我想对长度为 7 的向量 x 进行替换采样,并对该向量进行 10 次单独采样。我已经尝试过类似以下的方法,但无法获得我正在寻找的 7x10 输出。这会产生一个 1x7 向量,但我无法计算出其他 9 个向量

x <- runif(7, 0, 1)
for(i in 1:10){
    samp <- sample(x, size = length(x), replace = T)
}

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一种非常方便的方法:

    replicate(10,sample(x,length(x),replace = TRUE))
    

    【讨论】:

      【解决方案2】:

      由于您似乎想进行替换采样,因此您可以一次获取 7*10 个样本(这对于大尺寸更有效):

      x <- runif(7)
      n <- 10
      xn <- length(x)
      matrix(x[sample.int(xn, xn*n, replace=TRUE)], nrow=xn)
      
      # Or slightly shorter:
      matrix(sample(x, length(x)*n, replace=TRUE), ncol=n)
      

      第二个版本直接使用sample,但是这样做有一些问题:如果x是一个长度为1的数字,就会发生不好的事情。 sample.int 更安全。

      x <- c(pi, -pi)
      sample(x, 5, replace=T) # OK
      x <- pi
      sample(x, 5, replace=T) # OOPS, interpreted as 1:3 instead of pi...
      

      【讨论】:

        【解决方案3】:

        看起来您得到了合适的答案,但这里的方法与您的第一次尝试类似。不同之处在于我们使用适当的维度定义samp,然后迭代地索引到该对象并一次填充一行:

        samp <- matrix(NA, ncol = 7, nrow = 10)
        for(i in 1:10){
          samp[i,] <- sample(x, size = length(x), replace = T)
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-12
          • 2022-07-26
          • 1970-01-01
          • 2021-11-02
          相关资源
          最近更新 更多