gpt4 book ai didi

r - 在不使用 expand.grid 的情况下从 expand.grid 输出有效地创建随机样本

转载 作者:行者123 更新时间:2023-12-05 01:49:00 26 4
gpt4 key购买 nike

假设我有 3 个向量(仅作为示例)。现在我想获取这 3 个所有可能组合的随机样本。通常,我会这样做:

x <- 1:3
y <- 10:12
z <- 15:18

N <- length(x) * length(y) * length(z) # Length of the resulting grid
idx <- sample(1:N, 10, replace = FALSE)
my_grid <- expand.grid(x, y, z)
result <- my_grid[idx, ]

这对小向量来说很好。但是,如果这些向量的大小增长,my_grid 将很快变得非常大。那么问题来了,如何仅使用idx 和三个向量来创建result

最佳答案

这应该有效:

X <- list(x, y, z)
X.len <- sapply(X, length)

# modify '%%' to return values 1..n instead of 0..(n-1)
mod2 <- function(x, y) (x-1) %% y + 1

result <- sapply(seq_along(X), function(i)
X[[i]][mod2(ceiling(idx / prod(X.len[seq_len(i-1)])),
X.len[i])]
)

基本上,每个向量的 expand.grid 输出的列由值 block 组成,每个 block 的长度是“前面”向量长度的乘积。因此,您只需将索引除以该乘积,然后从该数字取模即可找到该位置上的值。

关于r - 在不使用 expand.grid 的情况下从 expand.grid 输出有效地创建随机样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74563284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com