【发布时间】:2014-12-04 03:42:47
【问题描述】:
我有一个相同大小的数字矩阵mat 和一个逻辑矩阵ind。我的目标非常基本:在条目上按列应用函数fun,由ind 指示。这是一个例子:
set.seed(42)
mat <- matrix(1:20, 4)
ind <- matrix(sample(c(F, T), 20, replace = T), 4)
fun <- function(x) sum(x)
fun 的“活动”子集是:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 . .
[3,] . 7 . . .
[4,] 4 . 12 16 20
我目前的解决方案:
sapply(1:ncol(mat), function(i) fun(mat[ind[, i], i]))
[1] 7 18 31 29 37
它完成了这项工作,但我感觉我错过了一些非常简单和优雅的东西。有什么想法吗?
编辑:这是另一个不允许多余零的函数,因此乘以 mat * ind 将无法正常工作。
fun2 <- function(x) sd(x)
sapply(1:ncol(mat), function(i) fun2(mat[ind[, i], i]))
[1] 1.527525 1.000000 1.527525 2.121320 2.121320
【问题讨论】: