gpt4 book ai didi

r - 创建序列组合

转载 作者:行者123 更新时间:2023-12-04 12:11:23 39 4
gpt4 key购买 nike

我正在尝试解决以下问题:

考虑 5 个简单序列:0:100、100:0、rep(0,101)、rep(50,101)、rep(100,101)

我需要一组 3 个数字变量,它们在所有组合中都具有上述序列。由于有 5 个序列和 3 个变量,因此可以有 5*5*5 种组合,因此每个变量共有 12625(5*5*5*101)个数字(每个序列 101 个)。

这些可以在 12625 行和 4 列的 data.frame 中分组。第一列 (V) 将只包含 seq(1:12625)(可以使用行号代替)。其他 3 列(A、B、C)将具有以上 5 个不同组合的序列。例如,前 101 行将在所有 3 个 A、B 和 C 中具有 0:100。接下来的 101 行将在 A 和 B 中具有 0:100,在 C 中具有 100:0。依此类推...

我可以创建序列:

s = list()
s[[1]] = 0:100
s[[2]] = 100:0
s[[3]] = rep(0,101)
s[[4]] = rep(50,101)
s[[5]] = rep(100,101)

但是如何进一步进行呢?我并不真的需要数据框,但我需要一个函数,该函数返回一个列表,其中包含发送给它的数字(第一列或 V 列)的 c(A,B,C) 值。数字显然可以从 1 到 12625 不等。

如何创建这样的函数。我更喜欢矢量解决方案或使用应用族函数来优化速度的解决方案。

最佳答案

你要求一个矢量化的解决方案,所以这是一个只使用 data.table 的解决方案(类似于@SimonGs 方法)

library(data.table)
grd <- CJ(A = seq_len(5), B = seq_len(5), C = seq_len(5))
res <- grd[, lapply(.SD, function(x) unlist(s[x]))]
res
# A B C
# 1: 0 0 0
# 2: 1 1 1
# 3: 2 2 2
# 4: 3 3 3
# 5: 4 4 4
# ---
# 12621: 100 100 100
# 12622: 100 100 100
# 12623: 100 100 100
# 12624: 100 100 100
# 12625: 100 100 100

关于r - 创建序列组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25713005/

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