# [R] create matrices with constraint

John McKown john.archie.mckown at gmail.com
Fri Dec 12 20:45:37 CET 2014

```On Fri, Dec 12, 2014 at 12:17 PM, peter dalgaard <pdalgd at gmail.com> wrote:

>
> > On 12 Dec 2014, at 18:00 , Kathryn Lord <kathryn.lord2000 at gmail.com>
> wrote:
> >
> > Dear all,
> >
> > Suppose that I have natural numbers 1 through 28.
> >
> > Based on these numbers, choose 4 numbers 7 times without replacement and
> > make a 4 by 7 matrix, for example,
> >
> >> a1
> >
> ​​
>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
> > [1,]    1    5    9   13   17   21   25
> > [2,]    2    6   10   14   18   22   26
> > [3,]    3    7   11   15   19   23   27
> > [4,]    4    8   12   16   20   24   28
> >
> > and again create another 4 * 7 matrix, say a2, in the same way; however,
> > every element of each column in a2 does not exist in any column of a1
> like
> > this, e.g.
> >
> >> a2
> >     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
> > [1,]    1    2    3    4    5    6    7
> > [2,]    8    9   10   11   12   13   14
> > [3,]   15   16   17   18   19   20   21
> > [4,]   22   23   24   25   26   27   28
> >>
> >
>
> No comprendo... In which sense does e.g. "1" in the first column of a2 not
> exist in any column of a1????
>

​I was confused about that too. Perhaps what she means is that each column
in the every "a" matrix has at least one value​

​which does not exist in any column of any other "a" matrix. So that the
set of values in a[,?] for a given version does not exist as a set of
values in any other column (ignoring order) of any other version of "a". So
a1[,1] is c(1,2,3,4) which means that no other a?[,?] contains _all_ of
those. It _may_ contain a proper subset, but at least one value in the set
must differ. But I'm not sure that I was any clearer.

Hum. Consider the set of all possible unique 4 value vectors in which the
values in the vectors are taken, without replacement, from the numbers 1
through 28. This is a mathematical concept called "combination". In this
case, there are 35 such: 7!/(4!*3!).
Combine those vectors in groups of 7
​, each group being a separate column,​
in such a way that each resulting matrix contains no duplicate numbers,
which also ensure
​s​
that each resulting matrix does contain all of the values 1 through 28.
Note that the vector c(1,2,3,4) and c(2,1,4,3) are considered identical
​ because, in a combination, order does not matter​
. So a matrix which has a column with c(1,2,3,4) stops any other matrix
from having a column with the values c(2,1,4,3).
​You can also note that two matrices would be consider "identical" if the
only difference is the arrangement of the column. For example:

​

​         ​
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
​   ​
[1,]    1    5    9   13   17   21   25
​   ​
[2,]    2    6   10   14   18   22   26
​   ​
[3,]    3    7   11   15   19   23   27
​   ​
[4,]    4    8   12   16   20   24   28

​
is really the same as (exchanging [,4] and [,1]):

​
​​
​​

​​

​     ​
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
​   ​
[1,]
​13
5    9
​ 1​
17   21   25
​   ​
[2,]
​14​
6   10
​ 2​
18   22   26
​   ​
[3,]
​15​
7   11
​ 3​
19   23   27
​   ​
[4,]
​16​
8   12
​ 4​
20   24   28

as is
​ (exchanging [3,7] and [4,7])​

​  ​​  ​     ​[,1] [,2] [,3] [,4] [,5] [,6] [,7]
​   ​ [1,]   ​13    5    9   ​ 1​   17   21   25
​   ​ [2,]   ​14​    6   10   ​ 2​   18   22   26
​   ​ [3,]   ​15​    7   11   ​ 3​   19   23   2
​8​
​   ​ [4,]   ​16​    8   12   ​ 4​   20   24   2
​7​

I think this is what the OP was getting at.

I can't think of a way, off hand, to generate all such "a" matrices. I
might be able to do the first part: creating all unique 4 value vectors.
But then combining the vectors together to make the matrices is not clear
to me.
​

>
>
> --
> Peter Dalgaard, Professor,
> Center for Statistics, Copenhagen Business School
> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
> Phone: (+45)38153501
> Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

--
​
While a transcendent vocabulary is laudable, one must be eternally careful
so that the calculated objective of communication does not become ensconced
in obscurity.  In other words, eschew obfuscation.

Maranatha! <><
John McKown

[[alternative HTML version deleted]]

```