我想利用一apply
组函数中的一个来进行一些计算。
首先,我有两个矩阵,mat1
并且mat2
:
mat1
:
a b c
1 NA NA NA
2 1 1 1
3 1 1 NA
4 NA 1 NA
mat2
:
a b c
a 1.0 0.2 0.3
b -0.7 1.0 0.8
c -0.1 -0.3 1.0
mat2
是使用与此处无关的函数计算mat1
的,本质上我想应用一个加权函数,当数据较少(因此不太准确)时mat1
对结果进行惩罚。mat2
因此,为了实现这一点,我想对于 中的某个坐标x,y
,mat2
计算 的两列的成对完整性mat1
。
例如:mat2["a","b"]
或mat2["b","a"]
(应该相同)将成为原始值 *(和的完整行和mat1
/a
的总行b
)。mat1
a
b
所以真正的问题是如何将一个函数应用于一个矩阵,该矩阵为每一列循环每一列(双循环)并将其存储在权重矩阵中以与另一个矩阵相乘?
我已经可以使用rollapply
fromzoo
包比较两行,如下所示:
rowSums(rollapply(is.na(t(mat1)), 2, function(x) !any(x)))
我得到:
[1] 2 1
如,比较 a 和 b,2 行是完整的,比较 b 和 c,1 行是完整的。那么如何比较 a 与 b、a 与 c 以及 b 与 c 的比较呢?
谢谢。