Doing as much as possible with vectors instead of loops of a good thing. Fooling yourself that apply functions are vectorized is, well, not a good thing.
If you want to write a function to use instead of sapply, fine, but don't call it *apply because those functions always give you one result for each input item you start with, and anyone who reads your code will be confused if you rename a standard function. I think you need to use ?while. --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --------------------------------------------------------------------------- Sent from my phone. Please excuse my brevity. On October 10, 2014 1:21:23 AM PDT, PO SU <rhelpmaill...@163.com> wrote: > >OK, it seems that i misunderstand something, i forget how and when i >pick up the monition in my mind that " as possible as avoid using for >loop". >TKS for all your suggestions! >But i still want the way to break sapply, if not exsits now, create it >..... >such as: > sapply<-function(...){ >out<-FALSE >..... >if(out==TRUE) return >} >sapply(1:10, function(i){ >if(i=5) out<-TRUE >} >) >That means to rewrite sapply, and create a virable in it , let called >OUT, then mayebe in sapply(1:10,FUN) >FUN can use OUT. because i think in sapply, FUN is an inner >function,so it can use OUT. >when it let OUT=TRUE. sapply should be break.......... > > > > > > > >-- > >PO SU >mail: desolato...@163.com >Majored in Statistics from SJTU > > > > >At 2014-10-10 14:44:47, "Hervé Pagès" <hpa...@fhcrc.org> wrote: >>Hi, >> >>On 10/09/2014 11:12 PM, PO SU wrote: >>> >>> >>> Is that mean while may be more effient than for in R? as i know, >while and for are all just functions in R. >>> Tks for your suggestion to not use apply that way, but i want to >know, if possible, is there any way to break it ? >> >>As Jeff said, you cannot break the loop that happens inside >>the sapply() call. Also it is *not* true that for or while are >>less efficient than sapply() or lapply(): >> >> > a <- numeric(100000) >> >> > system.time(for (i in 1:100000) {a[i] <- i * (i - 1) / 2}) >> user system elapsed >> 0.148 0.000 0.147 >> >> > system.time(b <- sapply(1:100000, function(i) {i * (i - 1) / 2})) >> user system elapsed >> 0.194 0.007 0.201 >> >> > identical(a, b) >>[1] TRUE >> >> > system.time(c <- unlist(lapply(1:100000, function(i) {i * (i - 1) / >2}))) >> user system elapsed >> 0.116 0.000 0.119 >> >> > identical(a, c) >>[1] TRUE >> >>OK lapply() is maybe slightly faster but not significantly. And the >>more work you need to do inside the loop, the less significant this >>difference will be. >> >>> Actually, there is a additional question: >>> x<- c(3,4,5,6,9) >>> sapply(x ,function(i){ >>> foo(i) #do something to each value in x,how can i know the i's >index in x? >>> )} >> >>You can't. Inside the anonymous function, you only have access to 'i' >>which is an element of 'x', not its index in 'x'. >> >>> In my way , i always >>> sapply(seq(x),function(i){ >>> foo(x[i]) >>> }) >> >>Yes, if you want to loop on the index instead of the elements, you >>need to do something like that. Using seq_along(x) is probably >>cleaner than seq(x) for this. >> >>Cheers, >>H. >> >>> or >>> Map( function(i,index){ >>> foo(i) # through index to know the i's index in x >>> },x ,seq(x)) >>> >>> How you solve the problem? I mean just use apply functions. >>> >>> >>> >>> -- >>> >>> PO SU >>> mail: desolato...@163.com >>> Majored in Statistics from SJTU >>> >>> >>> >>> >>> At 2014-10-10 13:58:29, "Jeff Newmiller" <jdnew...@dcn.davis.ca.us> >wrote: >>>> Don't use apply functions if you want to do what you describe. They >don't work that way. Use a while control structure. >>>> >>>> >--------------------------------------------------------------------------- >>>> Jeff Newmiller The ..... ..... Go >Live... >>>> DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. >Live Go... >>>> Live: OO#.. Dead: OO#.. >Playing >>>> Research Engineer (Solar/Batteries O.O#. #.O#. >with >>>> /Software/Embedded Controllers) .OO#. .OO#. >rocks...1k >>>> >--------------------------------------------------------------------------- >>>> Sent from my phone. Please excuse my brevity. >>>> >>>> On October 9, 2014 10:24:49 PM PDT, PO SU <rhelpmaill...@163.com> >wrote: >>>>> >>>>> Dear expeRts, >>>>> i use sapply for loop, and i want to break it when i needed, >how to >>>>> do that? e.g. >>>>> >>>>> sapply( 1:10, function(i) { >>>>> if(i==5) break and jump out of the function sapply >>>>> } ) >>>>> >>>>> I want to do it because i have to loop 1000000 times, but i don't >know >>>>> when it will break, that means, it may need break at i=5 or at >i=50000, >>>>> for the possible of the last case, i don't use for loop, because >it >>>>> slow(is it right?). >>>>> So,if you happen to know it ,may you help me? >>>>> >>>>> >>>>> -- >>>>> >>>>> PO SU >>>>> mail: desolato...@163.com >>>>> Majored in Statistics from SJTU >>>>> ______________________________________________ >>>>> 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. >>> >> >>-- >>Hervé Pagès >> >>Program in Computational Biology >>Division of Public Health Sciences >>Fred Hutchinson Cancer Research Center >>1100 Fairview Ave. N, M1-B514 >>P.O. Box 19024 >>Seattle, WA 98109-1024 >> >>E-mail: hpa...@fhcrc.org >>Phone: (206) 667-5791 >>Fax: (206) 667-1319 ______________________________________________ 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.