expand.grid() function
On Mon, 2008-06-23 at 16:07 +0200, ONKELINX, Thierry wrote:
Expand.grid works with lists too.
expand.grid(rep(list(c("u", "l")), 3))
Var1 Var2 Var3 1 u u u 2 l u u 3 u l u 4 l l u 5 u u l 6 l u l 7 u l l 8 l l l
Yes, and I got there as well, but then for some reason thought the OP wanted the result as a character matrix and so went off on a complicated path to do so. Not sure where I got that from!? I obviously need more coffee ;-) G
This is probably as concise as is can get. HTH, Thierry ------------------------------------------------------------------------ ---- ir. Thierry Onkelinx Instituut voor natuur- en bosonderzoek / Research Institute for Nature and Forest Cel biometrie, methodologie en kwaliteitszorg / Section biometrics, methodology and quality assurance Gaverstraat 4 9500 Geraardsbergen Belgium tel. + 32 54/436 185 Thierry.Onkelinx at inbo.be www.inbo.be To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of. ~ Sir Ronald Aylmer Fisher The plural of anecdote is not data. ~ Roger Brinner The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. ~ John Tukey -----Oorspronkelijk bericht----- Van: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] Namens Gavin Simpson Verzonden: maandag 23 juni 2008 15:51 Aan: Megh Dal CC: r-help at stat.math.ethz.ch Onderwerp: Re: [R] expand.grid() function On Mon, 2008-06-23 at 06:16 -0700, Megh Dal wrote:
Hi,
I have one question on expand.grid() function.
When I write following syntax :expand.grid(c("u", "l"), c("u", "l"),
c("u", "l")) I get following as desired :
Var1 Var2 Var3
1 u u u
2 l u u
3 u l u
4 l l u
5 u u l
6 l u l
7 u l l
8 l l l
However I wanted to write that in more concise manner. Therefore I
tried : expand.grid(rep(c("u", "l"), 3)). But I did not get answer
that I previously got. Can people here clarify me why it is not like
that? Then what would be the mose concise way to do that?
In the first case, you have three vectors of length 2 as arguments to
expand.grid, but in the second, you have a single vector of length 6. In
the latter case, expand.grid can't expand a single vector, hence the
single column result.
This is the closest I got to what you want:
as.matrix(expand.grid(split(rep(c("u","l"), times = 3),
factor(rep(1:3, each = 2)))))
Which gives:
as.matrix(expand.grid(split(rep(c("u","l"), times = 3),
factor(rep(1:3, each = 2)))))
1 2 3
[1,] "u" "u" "u"
[2,] "l" "u" "u"
[3,] "u" "l" "u"
[4,] "l" "l" "u"
[5,] "u" "u" "l"
[6,] "l" "u" "l"
[7,] "u" "l" "l"
[8,] "l" "l" "l"
But that isn't particularly concise...
HTH
G
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% Dr. Gavin Simpson [t] +44 (0)20 7679 0522 ECRC, UCL Geography, [f] +44 (0)20 7679 0565 Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/ UK. WC1E 6BT. [w] http://www.freshwaters.org.uk %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%