[R] "Improvement with the R code"

Elie Canonici Merle elie.canonicimerle at gmail.com
Mon Aug 28 17:31:56 CEST 2017


Hi,

I think you overthought this one a little bit, I don't know if this is the
kind of code you are expecting but I came up with something like that:

generate_transition_matrix <-  function(data, n_states) {

    #To be sure I imagine you should check n_states is right at this point

    transitions <- matrix(0, n_states, n_states)

    #we could improve a little bit here because at step N+1 source is dest
from step N
    #but it would not be as readable
    for (k in 1:(length(data) - 1)) {
        source_state <- data[k]
        dest_state <- data[k+1]
        transitions[source_state, dest_state] <- transitions[source_state,
dest_state] + 1
    }

    for (k in 1:n_states)
        transitions[k,] <- transitions[k,] / sum(transitions[k,])
    transitions
}

checkdf=data.frame(clusterNum=c(3,2,3,1,1,3,4,3,2,1,1,3,2,1,3,2))
no_of_state=4

transition_matrix= generate_transition_matrix(checkdf$clusterNum,
no_of_state)
transition_matrix



2017-08-28 16:37 GMT+02:00 niharika singhal <niharikasinghal1990 at gmail.com>:

> Hello,
>
> I am trying to implement a formula
>
>  aij= transition from state S_i to S_j/no of transition at state S_i
>
>
>
> Code I have written is working with three state {1,2,3 }, but if the number
> of states become={1,2,3,4,......n} then the code will not work, so can some
> help me with this.
>
> For   and some rows of my  data frame look like
>
> checkdf=data.frame(clusterNum=c(3,2,3,1,1,3,4,3,2,1,1,3,2,1,3,2)
> no_of_state=3
> transition_matrix=matrix(NA,nrow=no_of_state, ncol=no_of_state)
> for(k in 1: no_of_state)
> {
>   count1=0
>   count2=0
>   count3=0
>   #For last point no transition takes place
>   for(j in 1: (nrow(checkdf)-1))
>   {
>
>     if(checkdf$clusterNum[j]==k)
>     {
>       if(checkdf$clusterNum[j+1]==1){
>         count1=count1+1
>       }
>       else if(checkdf$clusterNum[j+1]==2){
>         count2=count2+1
>        }
>       else {
>         count3=count3+1
>        }
>     }
>   }
>
>   no_of_points=(count1+count2+count3)
>   s1=count1/no_of_points
>   s2=count2/no_of_points
>   s3=count3/no_of_points
>   transition_matrix[k,]=c(s1, s2, s3)
>
> }
>
> I know the code is not written nicely and I want to improve it.
>
> Thanks in advance
> Niharika
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list