我正在使用apply函数来计算从时间t1的八个状态到时间t2的相同的八个状态的迁移转移概率。我的数据以矩阵格式保存并命名为tmp(如下所示)。时间t1的状态是我的行,时间t2的状态是我的列。例如228人在t1和t2之间停留在1州; 3人在t1和t2之间从州2迁移到州1。
> 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