用r创建一个伪随机列表

时间:2019-02-08 13:51:31

标签: r

鉴于我有4个不同的值

intensities <- c(0.1,-0.1,0.05,-0.05)

我的目标是对每个值随机采样5次,但是正值和负值应该交替出现,例如

resultingList =(0.1,-0.05,0.05,-0.05,0.1,-0.1,...)

有人知道在R中执行此操作的优雅方法吗?

3 个答案:

答案 0 :(得分:2)

也许是这样

# seed
set.seed(123)

plus <- rep(intensities[intensities >= 0], each = 5)
minus <- rep(intensities[intensities < 0], each = 5)
out <- numeric(length(plus) + length(minus))
out[seq(1, length(out), 2)] <- sample(plus)
out[seq(2, length(out), 2)] <- sample(minus)
out
# [1]  0.10 -0.05  0.05 -0.10  0.10 -0.05  0.05 -0.05  0.05 -0.10  0.10 -0.05  0.05 -0.05  0.05 -0.10
# [17]  0.10 -0.10  0.10 -0.10

答案 1 :(得分:0)

这是我的解决方案,它创建一个自定义函数,而参数n表示输出的长度。另外,ceiling()floor()可以决定奇数和偶数位置的长度。

mySample <- function(x, n){
  res <- c()
  res[seq(1, n, 2)] <- sample(x[x >= 0], ceiling(n / 2), T)
  res[seq(2, n, 2)] <- sample(x[x < 0], floor(n / 2), T)
  return(res)
}

intensities <- c(0.1, -0.1, 0.05, -0.05)
mySample(intensities, 10)
# [1]  0.10 -0.10  0.05 -0.05  0.10 -0.05  0.05 -0.05  0.05 -0.10

答案 2 :(得分:0)

如果要从中采样的强度列表为+/-对,则可以从正值列表中采样,然后更改其他绘制的数字的符号:

N <- 5
positiveIntensities <- c(0.1, 0.05)
resultingList <- sample(positiveIntensities,N,replace = T) * (-1)^(0:(N-1))