在Tau[[i]][[j]]
中,我想将w
的第一个向量除以其所有向量的总和。我有两个向量列表。每个向量包含10个元素。但是,我看到第一个结果返回1 1
这是错误的。也就是说,Tau[[1]][[1]]
会返回1 1
。这是错的。除Tau
的代码外,我的代码工作得非常好。
这是我的代码:
vecW <- list(c(0.5, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.4, 0.6, 0.3),
c(0.5, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5, 0.4, 0.4, 0.7))
mat1 <- c(0, 0.5, 0.6, 0.5, 0.5,
0, 0, 0.5, 0.5, 0.5,
0, 0, 0, 0.4, 0.6,
0, 0, 0, 0, 0.3,
0, 0, 0, 0, 0)
mat1 <- matrix(mat1, 5, 5)
mat2 <- c(0, 0.5, 0.4, 0.5, 0.5,
0, 0, 0.5, 0.5, 0.5,
0, 0, 0, 0.4, 0.4,
0, 0, 0, 0, 0.7,
0, 0, 0, 0, 0)
mat2 <- matrix(mat2, 5, 5)
mat <- list(mat1, mat2)
set.seed(47)
a <-lower_tris <- list_of_pairs <- vector("list",2)
w <- Tau <- vector("list",2)
for( i in seq_along(a)){
for(j in 1:10){
a[[i]] <- array(rnorm(5 * 5 * 2), c(5, 5, 2))
for(k in seq(dim(a[[1]])[3])) a[[i]][,,k][upper.tri(a[[i]][,,k], diag = TRUE)] <- 0
lower_tris[[i]] <- apply(a[[i]], 3, function(x){x[lower.tri(x)]})
list_of_pairs[[i]] <- split(lower_tris[[i]], seq(nrow(lower_tris[[i]])))
vecW <- lapply(mat, function(x){x[lower.tri(x)]})
w[[i]][[j]] <- vecW[[i]][[j]] * list_of_pairs[[i]][[j]]
Tau[[i]][[j]] <- w[[i]][[j]] / Reduce('+',w[[i]])
}
}
我的问题在哪里?我该如何修理呢?
答案 0 :(得分:0)
如果你想要所有向量的总和(得到一个标量),我认为只需sum(unlist(w[[i]]))
代替Reduce('+', w[[i]])
。