如何将另一个函数作为变量传递给R中应用函数?

时间:2017-01-07 01:11:02

标签: r

所以我想在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)

1 个答案:

答案 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