将基于apply函数的代码更改为lapply函数

时间:2014-02-04 03:29:17

标签: r apply

我正在尝试使用lapply函数(实际上是mclapply函数)而不是apply函数来制定下面的代码。我希望它返回矩阵或类似的而不是列表。 hi函数在我的实际代码中非常复杂,所以我只提出了一个非常基本的例子。

hi <- function(a, matrix) {
  hi <- a[1] / a[2] * t(matrix) %*% matrix
  return(hi)
}

a_1 <- t(matrix(1:4))
a_2 <- t(matrix(5:8))
choleski <- matrix(1:4)

result <- apply(rbind(a_1, a_2), 2, hi, matrix=choleski)

所以我的问题基本上是,我如何使用lapply而不是apply重新构造上面的代码,即将lapply函数应用于hi函数而不是使用apply程序。{{1}}一个有效的解决方案将是非常棒的。

感谢。

1 个答案:

答案 0 :(得分:0)

如果您的目标是将hi应用于rbind(a_1, a_2)的每一列,那么您可以执行以下操作:

A <- rbind(a_1, a_2)
sapply(seq_len(ncol(A)), function(i) hi(A[, i], choleski))

或更简单(如果可以使rbind(a_1, a_2)成为data.frame):

A <- as.data.frame(rbind(a_1, a_2))
sapply(A, function(x) hi(x, choleski))

后者有效,因为data.frame是一种列表(列是其元素),sapply将函数应用于列表元素。默认情况下,sapply会尽可能简化其输出。