Variable number of loops

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Variable number of loops

WRAY NICHOLAS
I am trying to build a programme which will work out the permutations of a
number of variables, eg a=0 to 1, b=0 to 1, and c=0 to 2, so permutations
would be (0,0,0), (1,0,0), (0,1,0)... etc In this case there would be 2 x
2x 3 = 12 permutations.  If the number of variables are fixed it's easy to
loop round with nesting

However I don't have a fixed number of variables, so I have a variable
number of loops.  I am trying to use a recursive function to do this and
have been building it up step-wise

I want to return a list of all the permutations at the end, but the
programme I have so ar doesn't return a full list, but just the first
element

2 things -- 1 I don't see why this is happening, and 2 is this the right
way to approach this problem?  I cannot find find anything about this in R
on the net

recursfunc1<-function(xf,shiftvecf,vlistf){
  if(xf<4){
    xf<-xf+1
    vlistf[[length(vlistf)+1]]<-shiftvec[xf]
    #print(paste(xf,"and",shiftvec[xf]))
    print(vlistf)
    #print(shiftvec[xf])
    xf<-recursfunc1(xf,shiftvecf,vlistf)}
  return(vlistf)}

shiftvec<-c(2,1,1,0)
vlist<-list()
perm<-recursfunc1(xf=0,shiftvecf=shiftvec,vlistf=vlist)
perm

I want perm to return the elements of shiftvec as a list so that I can then
do all the permutations as the next stage, but it only returns the first
element of shiftvec

Thanks, Nick Wray

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Variable number of loops

Bert Gunter
Are you trying to reinvent ?expand.grid   ?

-- Bert

Bert Gunter
Genentech Nonclinical Biostatistics
(650) 467-7374

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
Clifford Stoll




On Fri, May 15, 2015 at 1:40 PM, WRAY NICHOLAS
<[hidden email]> wrote:

> I am trying to build a programme which will work out the permutations of a
> number of variables, eg a=0 to 1, b=0 to 1, and c=0 to 2, so permutations
> would be (0,0,0), (1,0,0), (0,1,0)... etc In this case there would be 2 x
> 2x 3 = 12 permutations.  If the number of variables are fixed it's easy to
> loop round with nesting
>
> However I don't have a fixed number of variables, so I have a variable
> number of loops.  I am trying to use a recursive function to do this and
> have been building it up step-wise
>
> I want to return a list of all the permutations at the end, but the
> programme I have so ar doesn't return a full list, but just the first
> element
>
> 2 things -- 1 I don't see why this is happening, and 2 is this the right
> way to approach this problem?  I cannot find find anything about this in R
> on the net
>
> recursfunc1<-function(xf,shiftvecf,vlistf){
>   if(xf<4){
>     xf<-xf+1
>     vlistf[[length(vlistf)+1]]<-shiftvec[xf]
>     #print(paste(xf,"and",shiftvec[xf]))
>     print(vlistf)
>     #print(shiftvec[xf])
>     xf<-recursfunc1(xf,shiftvecf,vlistf)}
>   return(vlistf)}
>
> shiftvec<-c(2,1,1,0)
> vlist<-list()
> perm<-recursfunc1(xf=0,shiftvecf=shiftvec,vlistf=vlist)
> perm
>
> I want perm to return the elements of shiftvec as a list so that I can then
> do all the permutations as the next stage, but it only returns the first
> element of shiftvec
>
> Thanks, Nick Wray
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Variable number of loops

Bert Gunter
1. Please always reply to the list unless there is a compelling reason
to keep the discussion private. You will have a better chance of
getting something useful that way.

2. I don't know what you mean by "I don't have a fixed number of
variables." You have to specify at least the number of variables and
how many levels each has in order to work out what you requested,
which is **NOT** the number of permutations but the number of
combinations AFAICS, which is exactly what expand.grid will give you.

3. Maybe what you're looking for is the ... arguments in function
calls, which would be used along the lines of:

myfun <- function( x,y,...)
{
## some code
combs <- expand.grid(...)
## some more code
}

Any good R tutorial will tell you about this if this is unfamiliar.

4. Another possibility might be to deliver a list of named variables
as an argument and then use do.call, e.g.

myfun <- (x,y, alist)
{
## some code
combs <- do.call(expand.grid, alist)
## some more code
}

?do.call and/or a tutorial for details.

5. Otherwise, maybe someone else can figure out what you're looking for.

Cheers,
Bert



Bert Gunter
Genentech Nonclinical Biostatistics
(650) 467-7374

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
Clifford Stoll




On Sat, May 16, 2015 at 11:16 AM, WRAY NICHOLAS
<[hidden email]> wrote:

> I might be but doesn't expand.grid need a defined and listed number of
> inputs?  The problem I'm having is that the number of variables is not
> fixed, so I'm not sure whether I can reference the variable number of
> variables by using a vector -- haven't had time to try yet   But thanks
> anyway Nick Wray
>
> On 16 May 2015 at 14:28, Bert Gunter <[hidden email]> wrote:
>>
>> Are you trying to reinvent ?expand.grid   ?
>>
>> -- Bert
>>
>> Bert Gunter
>> Genentech Nonclinical Biostatistics
>> (650) 467-7374
>>
>> "Data is not information. Information is not knowledge. And knowledge
>> is certainly not wisdom."
>> Clifford Stoll
>>
>>
>>
>>
>> On Fri, May 15, 2015 at 1:40 PM, WRAY NICHOLAS
>> <[hidden email]> wrote:
>> > I am trying to build a programme which will work out the permutations of
>> > a
>> > number of variables, eg a=0 to 1, b=0 to 1, and c=0 to 2, so
>> > permutations
>> > would be (0,0,0), (1,0,0), (0,1,0)... etc In this case there would be 2
>> > x
>> > 2x 3 = 12 permutations.  If the number of variables are fixed it's easy
>> > to
>> > loop round with nesting
>> >
>> > However I don't have a fixed number of variables, so I have a variable
>> > number of loops.  I am trying to use a recursive function to do this and
>> > have been building it up step-wise
>> >
>> > I want to return a list of all the permutations at the end, but the
>> > programme I have so ar doesn't return a full list, but just the first
>> > element
>> >
>> > 2 things -- 1 I don't see why this is happening, and 2 is this the right
>> > way to approach this problem?  I cannot find find anything about this in
>> > R
>> > on the net
>> >
>> > recursfunc1<-function(xf,shiftvecf,vlistf){
>> >   if(xf<4){
>> >     xf<-xf+1
>> >     vlistf[[length(vlistf)+1]]<-shiftvec[xf]
>> >     #print(paste(xf,"and",shiftvec[xf]))
>> >     print(vlistf)
>> >     #print(shiftvec[xf])
>> >     xf<-recursfunc1(xf,shiftvecf,vlistf)}
>> >   return(vlistf)}
>> >
>> > shiftvec<-c(2,1,1,0)
>> > vlist<-list()
>> > perm<-recursfunc1(xf=0,shiftvecf=shiftvec,vlistf=vlist)
>> > perm
>> >
>> > I want perm to return the elements of shiftvec as a list so that I can
>> > then
>> > do all the permutations as the next stage, but it only returns the first
>> > element of shiftvec
>> >
>> > Thanks, Nick Wray
>> >
>> >         [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > [hidden email] 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.
>
>

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Variable number of loops

Jim Lemon-4
Hi all,
Given the number of help requests that involve
permutations/combinations, and the less than obvious naming of the
expand.grid function, perhaps adding an alias such as
"permute.elements" or "combine.elements" might ease the tasks of both
searchers and those offering help. Neither of the above names appear
to be used at present.

Jim


On Sun, May 17, 2015 at 5:54 AM, Bert Gunter <[hidden email]> wrote:

> 1. Please always reply to the list unless there is a compelling reason
> to keep the discussion private. You will have a better chance of
> getting something useful that way.
>
> 2. I don't know what you mean by "I don't have a fixed number of
> variables." You have to specify at least the number of variables and
> how many levels each has in order to work out what you requested,
> which is **NOT** the number of permutations but the number of
> combinations AFAICS, which is exactly what expand.grid will give you.
>
> 3. Maybe what you're looking for is the ... arguments in function
> calls, which would be used along the lines of:
>
> myfun <- function( x,y,...)
> {
> ## some code
> combs <- expand.grid(...)
> ## some more code
> }
>
> Any good R tutorial will tell you about this if this is unfamiliar.
>
> 4. Another possibility might be to deliver a list of named variables
> as an argument and then use do.call, e.g.
>
> myfun <- (x,y, alist)
> {
> ## some code
> combs <- do.call(expand.grid, alist)
> ## some more code
> }
>
> ?do.call and/or a tutorial for details.
>
> 5. Otherwise, maybe someone else can figure out what you're looking for.
>
> Cheers,
> Bert
>
>
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
> (650) 467-7374
>
> "Data is not information. Information is not knowledge. And knowledge
> is certainly not wisdom."
> Clifford Stoll
>
>
>
>
> On Sat, May 16, 2015 at 11:16 AM, WRAY NICHOLAS
> <[hidden email]> wrote:
>> I might be but doesn't expand.grid need a defined and listed number of
>> inputs?  The problem I'm having is that the number of variables is not
>> fixed, so I'm not sure whether I can reference the variable number of
>> variables by using a vector -- haven't had time to try yet   But thanks
>> anyway Nick Wray
>>
>> On 16 May 2015 at 14:28, Bert Gunter <[hidden email]> wrote:
>>>
>>> Are you trying to reinvent ?expand.grid   ?
>>>
>>> -- Bert
>>>
>>> Bert Gunter
>>> Genentech Nonclinical Biostatistics
>>> (650) 467-7374
>>>
>>> "Data is not information. Information is not knowledge. And knowledge
>>> is certainly not wisdom."
>>> Clifford Stoll
>>>
>>>
>>>
>>>
>>> On Fri, May 15, 2015 at 1:40 PM, WRAY NICHOLAS
>>> <[hidden email]> wrote:
>>> > I am trying to build a programme which will work out the permutations of
>>> > a
>>> > number of variables, eg a=0 to 1, b=0 to 1, and c=0 to 2, so
>>> > permutations
>>> > would be (0,0,0), (1,0,0), (0,1,0)... etc In this case there would be 2
>>> > x
>>> > 2x 3 = 12 permutations.  If the number of variables are fixed it's easy
>>> > to
>>> > loop round with nesting
>>> >
>>> > However I don't have a fixed number of variables, so I have a variable
>>> > number of loops.  I am trying to use a recursive function to do this and
>>> > have been building it up step-wise
>>> >
>>> > I want to return a list of all the permutations at the end, but the
>>> > programme I have so ar doesn't return a full list, but just the first
>>> > element
>>> >
>>> > 2 things -- 1 I don't see why this is happening, and 2 is this the right
>>> > way to approach this problem?  I cannot find find anything about this in
>>> > R
>>> > on the net
>>> >
>>> > recursfunc1<-function(xf,shiftvecf,vlistf){
>>> >   if(xf<4){
>>> >     xf<-xf+1
>>> >     vlistf[[length(vlistf)+1]]<-shiftvec[xf]
>>> >     #print(paste(xf,"and",shiftvec[xf]))
>>> >     print(vlistf)
>>> >     #print(shiftvec[xf])
>>> >     xf<-recursfunc1(xf,shiftvecf,vlistf)}
>>> >   return(vlistf)}
>>> >
>>> > shiftvec<-c(2,1,1,0)
>>> > vlist<-list()
>>> > perm<-recursfunc1(xf=0,shiftvecf=shiftvec,vlistf=vlist)
>>> > perm
>>> >
>>> > I want perm to return the elements of shiftvec as a list so that I can
>>> > then
>>> > do all the permutations as the next stage, but it only returns the first
>>> > element of shiftvec
>>> >
>>> > Thanks, Nick Wray
>>> >
>>> >         [[alternative HTML version deleted]]
>>> >
>>> > ______________________________________________
>>> > [hidden email] 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.
>>
>>
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.