在向量中选择符合要求的随机索引

时间:2016-05-23 21:10:48

标签: r random vector

我有一个长度为1000的向量X,包含10个随机放置的和990个零。

我有以下功能修改了矢量X.

foo <- function(X){
    old <- sample(which(X==1),1)
    new <- sample(c(1:1000),1)
    X[old] <- 0
    X[new] <- 1

    return(X)
}

以上功能确实如下:

  1. 找到那些
  2. 随机选择其中一个的索引
  3. 选择X
  4. 中的随机位置
  5. 将之前找到的一个更改为零
  6. 将步骤3中的随机位置从0更改为1.
  7. 使用上面的代码,可以将1添加到已经拥有1的位置。这我不想成为可能。换句话说,我总是希望在我的向量中有10个。

    解决方案必须没有循环,因为我调用了这个函数数千次,速度至关重要。

1 个答案:

答案 0 :(得分:0)

new 索引必须限制为值,其中X不是1:

  foo <- function(X){
        old <- sample(which(X==1),1)
        new <- sample(c(1:1000)[X!=1],1)
        X[old] <- 0
        X[new] <- 1

        return(X)
    }