我正在尝试解决以下问题:
考虑 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)