Most of the time was being spent within the 'sapply' call. Here is a list from Rprof:
0 18.4 root 1. 18.4 system.time 2. . 12.9 A1 3. . . 12.9 sapply 4. . . . 12.9 lapply 5. . . . | 12.9 FUN 6. . . . | . 12.9 sapply 7. . . . | . . 12.9 lapply 8. . . . | . . . 12.9 FUN 9. . . . | . . . . 12.9 sapply 10. . . . | . . . . | 12.8 lapply 11. . . . | . . . . | . 12.8 FUN 12. . . . | . . . . | . . 12.8 sapply 13. . . . | . . . . | . . . 12.8 lapply 14. . . . | . . . . | . . . . 12.8 FUN 15. . . . | . . . . | . . . . | 12.7 sapply 16. . . . | . . . . | . . . . | . 12.5 lapply 17. . . . | . . . . | . . . . | . . 12.5 FUN 18. . . . | . . . . | . . . . | . . . 12.4 sapply 19. . . . | . . . . | . . . . | . . . . 10.8 lapply 20. . . . | . . . . | . . . . | . . . . | 10.4 FUN 21. . . . | . . . . | . . . . | . . . . | . 9.8 sapply 22. . . . | . . . . | . . . . | . . . . | . . 4.3 unique 23. . . . | . . . . | . . . . | . . . . | . . . 1.6 unique.default 23. . . . | . . . . | . . . . | . . . . | . . . 1.5 unlist 24. . . . | . . . . | . . . . | . . . . | . . . . 1.3 lapply 22. . . . | . . . . | . . . . | . . . . | . . 4.0 lapply 23. . . . | . . . . | . . . . | . . . . | . . . 2.4 FUN 19. . . . | . . . . | . . . . | . . . . 1.1 unique 2. . 5.3 A0 3. . . 5.3 A0 4. . . . 5.3 A0 5. . . . | 5.3 A0 6. . . . | . 5.2 A0 7. . . . | . . 5.1 A0 8. . . . | . . . 4.6 A0 9. . . . | . . . . 3.3 A0 My guess is that you are at least 6 levels of calls down in the sapply and within that, the 'unique' and 'lapply' split the time between them. Notice that for A0, it is the only function being recorded. On Thu, Sep 3, 2009 at 5:23 PM, Ben Bolker<bol...@ufl.edu> wrote: > > > > Bryan Keller wrote: >> >> The following recursion is about 120 times faster in C#. I know R is not >> known for its speed with recursions but I'm wondering if anyone has a tip >> about how to speed things up in R. >> >> #"T" is a vector and "m" is a number between 1 and sum(T) >> >> A <- function(T,m) { >> lt <- length(T) >> >> if (lt == 1) { >> if (0 <= m & m <= T[1]) { >> return(1) >> } else { >> return(0) >> } >> } >> R <- 0 >> for (u in 0:T[lt]) { >> R <- (R+(A(T[1:(lt-1)],(m-u)))) >> } >> return(R) >> } >> >> ------------- >> Bryan Keller, Doctoral Student/Project Assistant >> Educational Psychology - Quantitative Methods >> The University of Wisconsin - Madison >> >> ______________________________________________ >> 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. >> >> > > Can anyone tell me why my version takes TWICE AS LONG (to my surprise)? > > > A0 <- function(T,m) { > lt <- length(T) > > if (lt == 1) { > if (0 <= m & m <= T[1]) { > return(1) > } else { > return(0) > } > } > R <- 0 > for (u in 0:T[lt]) { > R <- (R+(A0(T[1:(lt-1)],(m-u)))) > } > return(R) > } > > A1 <- function(T,m) { > lt <- length(T) > > if (lt == 1) { > return(as.numeric(0 <= m & m <= T[1])) > } > sum(sapply(m-(0:T[lt]),A1,T=T[-lt])) > } > > system.time(a0 <- A0(1:8,20)) ## about 5 secs > system.time(a1 <- A1(1:8,20)) ## about 11 secs > > -- > View this message in context: > http://www.nabble.com/Recursion-is-slow-tp25284189p25284359.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. > -- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? ______________________________________________ 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.