我正在尝试使用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}}一个有效的解决方案将是非常棒的。
感谢。
答案 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
会尽可能简化其输出。