繁体   English   中英

R - 来自 Matrix 的“逐行”采样

[英]R - "row-wise" sampling from Matrix

假设我有 2x 矩阵:

x <- matrix(rep(1:5, 2), ncol=5, byrow=T)
prob <- matrix(rep(0, each=5, 2), ncol=5, byrow=T)
prob[1, 3] <- 1
prob[2, 4] <- 1

> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    5

> prob
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    1    0    0
[2,]    0    0    0    1    0

我想使用sample()从矩阵中执行“逐行”采样。 例如, sample将使用prob同一行中的probx每一行中选择一个值。 在上面的示例中,我希望sample每次都返回c(3,4)因为第 1 行的概率设置为 3=100%,第 2 行的概率设置为 4=100%。

但是,当我运行sample(x, prob=prob, size=nrow(x)) ,我收到34是任何顺序:

> sample(x, prob=prob, size=nrow(x))
[1] 4 3
> sample(x, prob=prob, size=nrow(x))
[1] 3 4

如何对矩阵x执行“逐行”采样?

一种带有mapplyasplit选项

mapply(sample, asplit(x, 1 ), prob = asplit(prob, 1), size = 1)
#[1] 3 4

您可以使用vapply (通过指定您期望的内容更安全)来循环每一行:

x <- matrix(rep(1:5, 2), ncol=5, byrow=T)
prob <- matrix(rep(0, each=5, 2), ncol=5, byrow=T)
prob[1, 3] <- 1
prob[2, 4] <- 1


vapply(seq_len(nrow(x)), function(i) {
  sample(x[i, ], prob = prob[i, ], size = 1)
}, FUN.VALUE = numeric(1)
)
#> [1] 3 4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM