Быстро генерируйте декартово произведение матрицы

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

Или он так, чтобы каждый объект мог только иметь конечное число ключей, но ключи могли быть чем-то от большого набора?

Вы могли также рассмотреть использование Объектного Реляционного Картопостроителя для создания запросов легче.

7
задан Josh Reich 15 September 2009 в 16:39
поделиться

4 ответа

Функция expand.grid () , полезная для этого:

R> GG <- expand.grid(1:10,1:10)
R> GG <- GG[GG[,1]>=GG[,2],]     # trim it to your 55 pairs
R> dim(GG)
[1] 55  2
R> head(GG)
  Var1 Var2
1    1    1
2    2    1
3    3    1
4    4    1
5    5    1
6    6    1
R> 

Теперь у вас есть подмножества 'n * (n + 1) / 2', и вы можете просто проиндексировать исходную матрицу .

8
ответ дан 6 December 2019 в 14:06
поделиться

Я не совсем понимаю, что вы делаете, поэтому просто выброшу кое-что, что может помочь, а может и не помочь.

Вот что я считаю декартовым произведением двух столбцов:

expand.grid(x[,1],x[,2])
3
ответ дан 6 December 2019 в 14:06
поделиться

Используя ответ Дирка:

idx <- expand.grid(1:nrow(x), 1:nrow(x))
idx<-idx[idx[,1] >= idx[,2],]
N <- cbind(x[idx[,2],], x[idx[,1],])

> all(M == N)
[1] TRUE

Всем спасибо!

1
ответ дан 6 December 2019 в 14:06
поделиться

Вы также можете попробовать пакет "Relations". Вот виньетка. Он должен работать следующим образом:

relation_table(x %><% x)
2
ответ дан 6 December 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: