r中Reduce()函数的意外输出

时间:2017-11-01 06:48:54

标签: r

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]])
    }
}

我的问题在哪里?我该如何修理呢?

1 个答案:

答案 0 :(得分:0)

如果你想要所有向量的总和(得到一个标量),我认为只需sum(unlist(w[[i]]))代替Reduce('+', w[[i]])