我有n名单的数量,让说list1,list2,... listn。每个列表有10个元素,我需要计算每个列表的10个元素的“暗淡”的“均值”。因此,输出应为length的向量n。
例如,输出向量的第一个元素应为:
n1 = mean(dim(list1[[1]]), dim(list1[[2]]), dim(list1[[3]]), ..., dim(list1[[10]])
Run Code Online (Sandbox Code Playgroud)
我知道如何使用for-loops 获得它,但是我确信这不是最佳解决方案。
列表具有从称为“ edgeR”的“ Bioconductor” R软件包之一衍生的结构。因此,列表的每个元素都具有以下结构:
$ :Formal class 'TopTags' [package "edgeR"] with 1 slots
.. ..@ .Data:List of 4
.. .. ..$ :'data.frame': 2608 obs. of 4 variables:
.. .. .. ..$ logFC : num [1:2608] 6.37 -6.48 -5.72 -5.6 -4.01 ...
.. .. .. ..$ logCPM: num [1:2608] 5.1 2.55 2.08 1.57 3.08 ...
.. .. .. ..$ PValue: num [1:2608] 3.16e-292 1.57e-187 2.15e-152 5.58e-141 1.27e-135 ...
.. .. .. ..$ FDR : num [1:2608] 7.37e-288 1.83e-183 1.67e-148 3.25e-137 5.92e-132 ...
.. .. ..$ : chr "BH"
.. .. ..$ : chr [1:2] "healthy" "cancerous"
.. .. ..$ : chr "exact"
Run Code Online (Sandbox Code Playgroud)
由于每个列表都有10个元素,因此在运行时,我会重复上述结构的10个步骤:
str(list1)
Run Code Online (Sandbox Code Playgroud)
lapply(或sapply)是您的朋友:
mean(sapply(mylist,dim))
Run Code Online (Sandbox Code Playgroud)
如果您有许多具有统一含义和结构的列表,则应改用列表列表(即mylist[[3]]而不是mylist3)。
sapply(mylist, function(x) mean(sapply(x,dim)))
Run Code Online (Sandbox Code Playgroud)
将返回内部列表均值的向量。
如果您的列表包含矩阵而非向量,并且您希望对其中一个维度(dim(.)[1]或dim(.)[2])求平均值,则可以使用ncol和nrow代替dim。
或者,您可以在那里传递任何功能,例如,
sapply(mylist, function(x) mean(sapply(x, function(y) sum(dim(y)))))
Run Code Online (Sandbox Code Playgroud)
平均尺寸的总和。