Try this:
unSpells[tail(Atr,1)==0] <-
apply(Atr,2,function(x)sum(x==0))[tail(Atr,1)==0]
Or (if you don't have to preserve the value in the unSpells vector):
unSpells <- apply(Atr,2,function(x)sum(x==0))
But in this case you have 0 instead of 1 in the second and fourth position.
Ciao,
domenico
Mario Lavezzi wrote:
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
______________________________________________
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.