R-根据应用功能更改代码,以更改lapply函数



我正在尝试使用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过程。有效的解决方案将很棒。

谢谢。

如果您的目标是将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) a data.frame可以):

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

后者起作用,因为data.frame是一种列表类型(其中列为其元素),并且sapply将功能应用于列表元素。默认情况下,sapply在可能的情况下简化了其输出。

最新更新