[R] expand.grid() function

Gavin Simpson gavin.simpson at ucl.ac.uk
Mon Jun 23 16:21:02 CEST 2008


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
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-help mailing list