Hi Mario -- This function
f <- function(m) { ## next 2 lines due to Bill Dunlap ## http://tolstoy.newcastle.edu.au/R/e4/devel/08/04/1206.html csum <- cumsum(!m) crun <- csum - cummax(m * csum) matrix(ifelse(crun > 0, (crun-1) %% nrow(m) + 1, 0), nrow=nrow(m)) } returns a matrix with elements indicating the number of successive 0's so far in the column > f(Atr) [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 1 0 [3,] 0 0 2 0 [4,] 0 0 3 0 [5,] 1 0 4 0 [6,] 2 0 5 0 [7,] 3 0 6 0 [8,] 4 0 7 0 from which the last row is easily extracted > f(Atr)[nrow(Atr),] [1] 4 0 7 0 Martin Mario Lavezzi <[EMAIL PROTECTED]> writes: > Hello, > I have the following problem. > > I am running simulations on possible states of a set of agents > (1=employed, 0=unemployed). > > I store these simulated time series in a matrix like the following, > where rows indicates time periods, columns the number of agents (4 > agents and 8 periods in this case): > > Atr=[ > 1 1 1 1 > 1 1 0 1 > 1 1 0 1 > 1 1 0 1 > 0 1 0 1 > 0 1 0 1 > 0 1 0 1 > 0 1 0 1] > > At this point, I need to update a vector ("unSpells") which contains > the lenghts of unemployment spells, and is initialized with > ones. Practically, in the case represented I need to store the value > "4" at position 1 of unSpells and "7" at position 3 of unSpells (that > is, I care only of those who, in the last row, are zeros). > > I am doing this in the following way (tt+1 indicates the time period > reached by the simulation, n the number of agents): > > unSpells = matrix(1,nrow=1,ncol=n) > ppp=apply(Atr[1:(tt+1),],2,rle) > for(i in (1:n)[Atr[tt+1,]==0]){ > unSpells[i]=tail(ppp[[i]]$lengths,1) > } > > It works, but the for (i in ...) loop slows down the simulation a lot. > > Any suggestion on how to avoid this loop? (or in general, to speed up > this part of the simulation) > > Thanks!! > Mario > > -- > Andrea Mario Lavezzi > Dipartimento di Studi su Politica, Diritto e Società > Università di Palermo > Piazza Bologni 8 > 90134 Palermo, Italy > tel. ++39 091 6625600 > fax ++39 091 6112023 > skype: lavezzimario > email: lavezzi (at) unipa.it > web: http://www.unipa.it/~lavezzi > > ______________________________________________ > 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. -- Martin Morgan Computational Biology / Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 Location: Arnold Building M2 B169 Phone: (206) 667-2793 ______________________________________________ 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.