[R] apply a function on elements of a list two by two

David Winsemius dwinsemius at comcast.net
Sat May 8 16:04:14 CEST 2010


On May 8, 2010, at 9:43 AM, Joris Meys wrote:

> Dear all,
>
> I want to apply a function to list elements, two by two. I hoped  
> that combn
> would help me out, but I can't get it to work. A nested for-loop  
> works, but
> seems highly inefficient when you have large lists. Is there a more
> efficient way of approaching this?
>
> # Make some toy data
> data(iris)
> test <- vector("list",3)
> for (i in 1:3){
>    x <- levels(iris$Species)[i]
>    tmp <- dist(iris[iris$Species==x,-5])
>    test[[i]] <- tmp
> }
> names(test) <- levels(iris$Species)
>
> # nested for loop works
> for(i in 1:2){
>    for(j in (i+1):3){
>        print(all.equal(test[[i]],test[[j]]))
>    }
> }
>
> # combn doesn't work
> combn(test,2,all.equal)

all.equal takes two arguments:

 > all.equal(c(1,2))
Error in mode(current) :
   element 1 is empty;
    the part of the args list of 'is.expression' being evaluated was:
    (x)

So...:

 > combn(test,2, function(x) all.equal(x[[1]], x[[2]]))
      [,1]
[1,] "Attributes: < Component 4: 50 string mismatches >"
[2,] "Mean relative difference: 0.7888781"
      [,2]
[1,] "Attributes: < Component 4: 50 string mismatches >"
[2,] "Mean relative difference: 0.953595"
      [,3]
[1,] "Attributes: < Component 4: 50 string mismatches >"
[2,] "Mean relative difference: 0.6366219"

Thanks for posing this problem. It made me look at portions of combn's  
capacities about which I was completely unaware/
-- 
David.
>
> Cheers
> Joris
> -- 
> Joris Meys
> Statistical Consultant
>
> Ghent University
> Faculty of Bioscience Engineering
> Department of Applied mathematics, biometrics and process control
>
> Coupure Links 653
> B-9000 Gent
>
> tel : +32 9 264 59 87
> Joris.Meys at Ugent.be
> -------------------------------
> Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list