【问题标题】:Sample 5 times and sum, with replacement采样 5 次并求和,替换
【发布时间】:2015-07-14 06:41:06
【问题描述】:

我正在尝试通过稍微扭曲的替换进行采样。我想对列表、向量等进行采样 5 次并将其相加。并替换 5 个采样值,重复 1000 次。

x<- 1:1000
samp <- matrix(NA, ncol = 1, nrow = 1000)
for(i in length(x)){
samp[i,] <- sum(sample(x,5,replace = TRUE))}

我不明白为什么这个循环不起作用

【问题讨论】:

    标签: r for-loop sum resampling


    【解决方案1】:

    您在length(x) 前面错过了1:(即从1 到x 的长度减1)。你的代码应该是这样的:

    x<- 1:1000
    samp <- matrix(NA, ncol = 1, nrow = 1000)
    for(i in 1:length(x)){
      samp[i,] <- sum(sample(x,5,replace = TRUE))}
    

    效果很好:

    > str(samp)
     int [1:1000, 1] 2715 2312 3180 1364 2851 2429 2888 2381 2772 2317 ...
    

    另外,for-loops 在 R 语言中的速度很慢,因此您可能需要考虑其他循环方式,例如使用 C++ 方式和(例如)replicate,如下所示:

    定义函数:

    myfunc <- function(x) {
      sum(sample(x,5,replace = TRUE))
    }
    

    然后像这样使用它:

    x <- 1:1000
    mymat <- matrix(replicate(1000, myfunc(x)), ncol=1)
    
    > str(mymat)
     int [1:1000, 1] 2481 2236 2492 1759 1905 3243 2606 2624 3013 2309 ...
    

    【讨论】:

    • 这很好用!也感谢功能的想法:)
    • 真的很高兴我能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多