Расширьте сетку (или набор мощности) с ограничениями - PullRequest
0 голосов
/ 26 мая 2018

Этот вопрос может быть слишком общим, но я чувствую, что он возникает снова и снова в моей работе и поэтому, вероятно, представляет интерес для других.

Предположим, я хочу создать таблицу данных (или матрицу), котораяоснован на расширении сетки.

 library(data.table)
 Vmat1 = data.table(expand.grid(c(list(d = 1:5, w = 1:(3)))))

Предположим, однако, что если бы я сделал это, это привело бы к ошибке памяти для истинного набора мощности.Однако есть ограничения, которые я хочу наложить, например:

Если w> 1, то должно быть, что d <3 </p>

Это тогда дает меньший окончательный набор, который будет не приводит к ошибке памяти:

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

Мой вопрос: возможно ли заранее наложить ограничение при создании сетки?Это слишком дорого, чтобы построить полный набор мощности, а затем кондиционировать и уменьшать.

1 Ответ

0 голосов
/ 26 мая 2018

Если вас беспокоит память, вы можете разделить ее на наборы, как подсказывает @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
...