[英]Replacing a double nested for-loop with a lapply family in R
我目前正在使用double(嵌套) for
循環來實現以下公式: 。
一切正常。 但是我想知道是否可以:
(A)輸入r
如在本情況下,單個數.3
,而不是矩陣.3
秒和1
S'
(B)使用lapply
系列代碼,例如mapply
而不是嵌套for
-loop?
V <- c(.25, .5, .75)
m <- length(V)
r <- matrix(c(1, .3, .3, .3, 1, .3, .3,.3, 1), 3, 3)
sumV <- 0
for (i in 1:nrow(r)) {
for (j in 1:nrow(r)) {
sumV <- sumV + r[i,j] * sqrt(V[[i]]*V[[j]])
}
}
(1/m)^2 * sumV # Final answer
您嘗試的一個簡短版本是
(1/m)^2 * sum(sqrt(outer(V, V)) * r)
#[1] 0.2599292
outer
將每個元素與每個其他元素相乘,這就是double循環正在做的事情。 然后,我們采取sqrt
所有的值,用乘法r
矩陣, sum
它們並通過乘以(1/m)^2
。
我們想將對角元素乘以1,將其余的元素與r
值相乘,這在r
是矩陣時很容易,但是,如果它是單個數字,則需要相應地構造矩陣。
r <- .3
mat <- sqrt(outer(V, V))
mult_matrix <- matrix(r, ncol(mat), nrow(mat))
diag(mult_matrix) <- 1
(1/m)^2 * sum(mat * mult_matrix)
#[1] 0.2599292
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.