如何在R中汇总向量列表

时间:2018-03-27 14:51:25

标签: r

假设我有一个列表清单。我想将Tau的每个向量除以Tau的所有向量的总和。也就是说,

Tau[[1]][[1]] / sum(Tau[[1]],Tau[[1]][[2]],Tau[[2]][[1]],Tau[[2]][[1]])

我想为Tau的每个元素执行此操作。我尝试了Reduce,但它返回了一个错误。

tau1 <- rnorm(10,0,1)
tau2 <- rnorm(10,0,1)
tau <- list(tau1, tau2)
tau

tau3 <- rnorm(10, 0,1)
tau4 <- rnorm(10,0,1)
tau5 <- list(tau3, tau4)
tau5



Tau <- list(tau, tau5)
 Tau
[[1]]
[[1]][[1]]
 [1]  0.41435211 -0.28983281  0.96462705 -1.32050463 -0.15736981  0.07512305
 [7] -0.73394053 -0.12630874  0.21886818  1.57760128

[[1]][[2]]
 [1] -1.31643065  1.24744501  0.09073152 -1.02300779  0.63927688 -2.09642019
 [7]  1.25458113 -0.21542568 -0.07314255  1.02092833


[[2]]
[[2]][[1]]
 [1]  0.2582012  0.9561437 -0.8351850  0.3028827 -0.7016825 -0.6400293
 [7]  0.1925083 -1.0869632  0.3688728 -0.1837725

[[2]][[2]]
 [1] -2.560212660  1.953122685  0.087180131  2.252459267 -0.003317207
 [6] -1.767479446 -0.298496963  0.015214568  0.300665882 -1.017860244

Reduce("+", Tau)
Error in f(init, x[[i]]) : non-numeric argument to binary operator

请帮忙吗?

4 个答案:

答案 0 :(得分:1)

尝试:

Tau[[1]][[1]] / sum(unlist(Tau))

因为这是列表的2级列表:

lapply(Tau, FUN = function(x)     ### to dive into the first level
   lapply(x,FUN = function(x) (x/sum(unlist(Tau)))))

答案 1 :(得分:0)

Tau <- list(tau, tau5)正在制作一个包含两个元素的列表,这两个元素本身都是列表。因此,Reduce调用会尝试将两个列表一起添加,但这些列表尚未定义。

您需要使用append将两个列表的元素组合到一个列表中:

Tau <- append(tau, tau5)
Reduce("+", Tau)
# [1] -0.7481876  3.2098496  1.9950819  2.8188345  1.4200328  0.2202510
# [7]  0.1448013  0.8132506 -0.7788742  0.5466227

答案 2 :(得分:0)

我认为你可以使用unlist。从其帮助文件:

  

给定列表结构x,unlist简化它以生成包含x中出现的所有原子组件的向量。

sum(unlist(Tau))

答案 3 :(得分:0)

您可以尝试tidyverse解决方案

library(tidyverse)
Tau %>% 
  flatten() %>% # This function removes a level hierarchy from the list.
  map(function(x) x/sum(unlist(.))) # This function applies a function to each element of the list
[[1]]
 [1] -0.3101120 -0.1273576  0.8624357  0.0390124  0.0715351  0.9489481  0.2550256 -0.6999603
 [9] -0.3800367 -0.2465854

[[2]]
 [1]  0.67728632  0.19908554  0.22174745  0.06124092 -0.30754775  0.98870176  0.27546143 -1.08813227
 [9]  0.38806129 -0.26159621

[[3]]
 [1] -0.59082848 -0.12060585 -0.56768982 -0.40329663 -0.34583518 -0.93324998  0.46354885  0.08486158
 [9] -0.62973290  0.69373770

[[4]]
 [1]  0.23596330 -0.16326350  0.49527439  0.48587260  0.45458206  0.38102570  0.30648348 -0.03425584
 [9] -0.16928961 -0.21051518

您的数据。我添加了种子以获得再现性

set.seed(123)
tau1 <- rnorm(10,0,1)
tau2 <- rnorm(10,0,1)
tau3 <- rnorm(10, 0,1)
tau4 <- rnorm(10,0,1)
Tau <- list(list(tau1, tau2), list(tau3, tau4))