r применить функцию для вычисления пропорций по строке в матрице - PullRequest
0 голосов
/ 18 мая 2018

Я использую функцию 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
...