Я использую функцию apply для вычисления вероятностей перехода от восьми состояний в момент времени t1 к тем же восьми состояниям в момент времени t2.Мои данные сохраняются в матричном формате с именем tmp (как показано ниже).состояния в момент времени t1 - мои строки, а состояния в момент времени t2 - мои столбцы.например, 228 человек находились в состоянии 1 между t1 и t2;3 человека перешли из состояния 2 в состояние 1 между t1 и t2.
> class(tmp)
"matrix"
> tmp
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 228 0 0 0 0 0 0 0
[2,] 3 92 0 0 0 0 0 0
[3,] 0 0 30 0 0 0 0 0
[4,] 0 0 0 20 0 0 0 0
[5,] 0 0 0 0 19 0 0 0
[6,] 0 0 0 0 0 0 0 0
[7,] 0 0 0 3 0 0 0 0
[8,] 0 0 0 0 0 0 0 3
Я использовал следующий код для вычисления вероятностей перехода в определенное состояние или пребывания в нем.Это пропорции для клеток в каждом ряду.Результаты сохраняются в tmp1.
> tmp1=apply(tmp,1,function(X){if (sum(X)!=0) {X/sum(X)} else {numeric(length(X))}})
Проблема в том, что я ожидал, что tmp1 [4,7] будет 0 (потому что tmp [4,7] равно 0), но код возвращает меня 1 (выделено жирным шрифтом).Есть ли проблема в моей функции применения?
> tmp1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 0.03157895 0 0 0 0 0 0
[2,] 0 0.96842105 0 0 0 0 0 0
[3,] 0 0.00000000 1 0 0 0 0 0
[4,] 0 0.00000000 0 1 0 0 **1** 0
[5,] 0 0.00000000 0 0 1 0 0 0
[6,] 0 0.00000000 0 0 0 0 0 0
[7,] 0 0.00000000 0 0 0 0 0 0
[8,] 0 0.00000000 0 0 0 0 0 1