[英]How can a rowwise matrix operation avoid a loop (“purrr-ified”)?
是否可以避免在以下示例中使用 for 循环? 我曾尝试在某个时候使用purrr::pmap
,但它似乎比这个解决方案更复杂。 存在类似问题,但更多关于列表或 dataframe 列。
该示例来自矩估计方法 (GMM) 的上下文,尽管它在此处已高度程式化。
# Data
Z <- matrix(c(1:15), nrow = 5, ncol = 3)
r <- rnorm(5)
g_bar <- matrix(1:3, ncol = 1)
# First observation
g <- (Z[1,] * r[1]) - g_bar
# All other observations
for (i in 2:nrow(Z)) {
g_i <- (Z[i,] * r[i]) - g_bar
g <- cbind(g, g_i)
}
g # A 3x5 matrix
这是另一个解决方案:
g <- t(Z * r) - c(g_bar)
如果计算正是问题中的那个,那么已经有一个更好的答案,但是如果实际计算更复杂,那么这可能会推广到它:
mapply(function(z, r) z * r - g_bar, as.data.frame(t(Z)), r)
或者
mapply(function(z, r, g) z * r - g, as.data.frame(t(Z)), r,
MoreArgs = list(g = g_bar))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.