所以我想在R中的矩阵上应用一个函数.appin函数接受一个带有两个参数的自定义函数:矩阵的元素和元素所属的行的总和。以下是可重现的代码
m = (matrix(1:10, nrow=2))
## Custom Function
IC = function(element, sum_rows){
value = -log(element/sum_rows,2)
return(value)
}
我想知道是否有任何方法可以将rowSums作为参数传递给应用函数,如下面的
apply(m,1:2,IC,sum_rows = rowSums)
答案 0 :(得分:3)
当逐个元素(使用MARGIN = 1:2
)时,rowSums
函数将无效,因为没有行。每个元素都是原子矢量。
幸运的是,此操作可以完全矢量化,log2
可以用于二进制(基数2)对数。
-log2(m / rowSums(m))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 4.643856 3.058894 2.321928 1.836501 1.473931
# [2,] 3.906891 2.906891 2.321928 1.906891 1.584963