我想从一个向量中随机选择n个元素进行删除,其中n大于等于0。n是从二项式分布中抽样得到的,可能很小,甚至为0。
我希望尽可能高效地完成此操作,以便可以多次运行代码。问题在于,如果n = 0,则使用vec[-sample(vec,n)]
可能会导致出现空向量。
我有几个想法,不知道是否有更好或更快的方法来解决这个问题。
- 在删除操作之前使用负号和if语句。
# y is a vector of length 10000
n <- rbinom(n = 1, size = 10000, p = 0.0001)
if (length(n) != 0){
y <- y[-sample((1:10000), size = n)]
}
2. 选择所有其他元素。
# y is a vector of length 10000
n <- rbinom(n = 1, size = 10000, p = 0.0001)
n <- 10000 - n
y <- sample(y, size = n)
rbinom(n, 1, 1 - p)
,但速度较慢。 - jay.sfas.logical()
包装器。 (这不需要任何时间) - Gregor Thomas