簡體   English   中英

用R中的Lapply族替換雙嵌套的for循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM