我有一个矩阵A,它有大量的行和列(在这样一个矩阵的一个例子下面),偶尔会有一个完整的0行值(如在这个特定的例子中的第4行) .
我想要一个检查A的所有行的函数,并允许我对这些行的每个元素执行操作 . 有一个简单的方法吗?
我也想知道矩阵是否是正确的数据结构 . 感觉不太对劲,也许数据框架更好?
A = matrix(
c(0, 0, 1, 0, 0, 0, 0,
1, 0, 1, 1, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1,
0, 0, 0, 1, 1, 0, 1), nrow=7,ncol=7,byrow = TRUE)
对于该矩阵的每一行,我想确定其中是否只有0 . 如果是这样,我想设置(对于每个元素)值1 / N(其中N是ncol(A)) .
Sudo代码:
如果(sum(A行)== 0)则row_of_A = 1 / ncol(A)
1 回答
显然你想要这个:
说明:
A != 0
检查所有矩阵元素,并返回一个带有TRUE
的逻辑矩阵,用于非零元素 .然后我们对该逻辑矩阵的行求和,从而将
FALSE
/TRUE
强制为0/1 .我们检查这些rowums是否为0,并使用生成的逻辑向量对行进行子集化 .
我们将1 / ncol分配给此子集 .
基准显示
apply
较慢: