这个问题可能过于笼统,但我觉得它在我的工作中一再出现,因此可能引起其他人的兴趣。
假设我想创建一个基于扩展网格的数据表(或矩阵)。
library(data.table)
Vmat1 = data.table(expand.grid(c(list(d = 1:5, w = 1:(3)))))
但是假设如果我这样做,这将导致真实功率集的内存错误。但是,我想要施加约束,例如:
如果w> 1,则必须是d <3
然后,这会给出较小的最终集,不会导致内存错误:
Vmat1[w>1 & d<3 | w==1]
d w
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
6: 1 2
7: 2 2
8: 1 3
9: 2 3
我的问题是,是否可以在创建网格时事先施加限制?构建全功率组件然后调节和降低成本太高。
答案 0 :(得分:1)
如果您关注的是记忆,可以按照@chinsoon的建议分成几组。
# Filter Method
V = CJ(d = 1:5, w = 1:3) # same as data.table(expand.grid(c(list(d = 1:5, w = 1:(3))))) except ordering
a <- V[w>1 & d<3 | w==1]
# Sets Method
d <- 1:5
w <- 1:3
b <- rbindlist(list(
CJ(d = d[d < 3], w = w[w > 1])
, CJ(d = d, w = w[w == 1])))
all(a == b[order(d, w)])
# [1] TRUE