I do agree with Dr Berry that your question failed on several grounds in adherence to the Posting Guide, so this is off list.

Maybe this will give you guidance that you can apply to your next question to the list:

> alist <- list("a","b","c")
> blist <- list("ab","ac","ad")

> expand.grid(alist, blist)
  Var1 Var2
1    a   ab
2    b   ab
3    c   ab
4    a   ac
5    b   ac
6    c   ac
7    a   ad
8    b   ad
9    c   ad

> apply( expand.grid(alist, blist), 1, function(x) paste(x[1], x[2], sep=""))
[1] "aab" "bab" "cab" "aac" "bac" "cac" "aad" "bad" "cad"

> clist <- list("AA","BB")

> apply(expand.grid(alist, blist, clist),1,function(x) paste(x[1], x[2], x[3], sep="")) [1] "aabAA" "babAA" "cabAA" "aacAA" "bacAA" "cacAA" "aadAA" "badAA" "cadAA" "aabBB"
[11] "babBB" "cabBB" "aacBB" "bacBB" "cacBB" "aadBB" "badBB" "cadBB"

> dlist <- list(TRUE,FALSE)

> apply(expand.grid(alist, blist, clist, dlist),1,function(x) paste(x[1], x[2], x[3], (x[4]), sep=""))[8:12]
[1] "badAATRUE" "cadAATRUE" "aabBBTRUE" "babBBTRUE" "cabBBTRUE"


This could get unwieldily if the length of the lists are appreciable, since the number of rows will be the product of all the lengths. On the other hand you could create a dataframe indexed by the variables in expand.grid's output:

>  master.df <- data.frame( expand.grid(alist, blist, clist, dlist),
results = apply(expand.grid(alist, blist, clist,dlist),1, function(x) paste(x[1], x[2], x[3], (x[4]), sep="")))



--
David Winsemius

On Dec 22, 2008, at 3:33 PM, Charles C. Berry wrote:

On Mon, 22 Dec 2008, Brigid Mooney wrote:

Hi All,

I'm still pretty new to using R - and I was hoping I might be able to get some advice as to how to use 'apply' or a similar function instead of using
nested for loops.

Unfortunately, you have given nothing that is reproducible.

The details of MyFunction and the exact structure of the list objects are crucial.

Check out the _Posting Guide_ for hints on how to formulate a question that will elecit an answer that helps you.

HTH,

Chuck



Right now I have a script which uses nested for loops similar to this:

i <- 1
for(a in Alpha) { for (b in Beta) { for (c in Gamma) { for (d in Delta) {
for (e in Epsilon)
{
     Output[i] <- MyFunction(X, Y, a, b, c, d, e)
      i <- i+1
}}}}}


Where Output[i] is a data frame, X and Y are data frames, and Alpha, Beta, Gamma, Delta, and Epsilon are all lists, some of which are numeric, some
logical (TRUE/FALSE).

Any advice on how to implement some sort of solution that might be quicker
than these nested 'for' loops would be greatly appreciated.

Thanks!

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
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.


Charles C. Berry                            (858) 534-2098
Dept of Family/Preventive Medicine
E mailto:cbe...@tajo.ucsd.edu               UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901

______________________________________________
R-help@r-project.org mailing list
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.

______________________________________________
R-help@r-project.org mailing list
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 via email to