У меня есть два списка, list1
и list2
. Первая состоит из значений кластеров и последней из кластеров pvalues. Элементы в каждом списке строго связаны, например, list1[[1]]
имеет 13 номеров, а list2[[1]]
имеет 13 значений, соответствующих каждому значению в list1
. Затем у меня есть еще один список: list3
, с определенным количеством pvalues (в моем реальном случае есть не менее 100), классифицированных по номерам в list1
, то есть list3['1']
будет иметь все pvalues от list2
, что соответствует значению 1
. Вот несколько примеров объектов, чтобы прояснить вопрос.создать список матриц, где столбцы являются перестановками на основе списка
list1
# $cluster.1
# [1] 1 2 12 58 31 41 44 24
#
# $cluster.2
# [1] 6 56 46 44
#
# $cluster.3
# [1] 1 63 74 4 12
#
# $cluster.4
# [1] 49 112 9 34 4 76 48 18 20 64
#
# $cluster.5
# [1] 14 22 63 47 36 6 40 7 2 4 90 16 20 15 14 18 76 35
#
# $cluster.6
# [1] 1 9 1 8 2 2 51 36 3 212 33 12 88 23
list2
# $cluster.1
# [1] 0.6591487 0.8994453 0.1538042 0.6964092 0.8401874 0.3814041 0.4633218
# [8] 0.7244993
#
# $cluster.2
# [1] 0.8497138 0.5865632 0.1077595 0.6833493
#
# $cluster.3
# [1] 0.3361554 0.6120117 0.0981049 0.5463973 0.3299392
#
# $cluster.4
# [1] 0.66537320 0.92404972 0.03616409 0.20704537 0.40120409 0.68727494
# [7] 0.60326315 0.08871090 0.71780273 0.09714994
#
# $cluster.5
# [1] 0.5926167 0.4155177 0.5230090 0.3620749 0.8698867 0.2490805 0.2775648
# [8] 0.1876079 0.5346257 0.6736455 0.3626760 0.8941776 0.4278336 0.7944475
# [15] 0.6687182 0.0171974 0.2931373 0.3987727
#
# $cluster.6
# [1] 0.3222530 0.1097813 0.3014139 0.9999900 0.5232969 0.4544731 0.4342567
# [8] 0.9999900 0.5435826 0.1937477 0.1713069 0.7474790 0.1683223 0.8814443
list3[1:2]
# $`1`
# [1] 0.2977049 0.3080035 0.3445133 0.2938342 0.3630210 0.3037416 0.2841442
# [8] 0.2777617 0.3366143 0.3121525 0.2460582 0.3229141 0.3283752 0.4038269
# [15] 0.3220467 0.3059212 0.2960296 0.3747395 0.3228451 0.2894994 0.3609505
# [22] 0.3447814 0.2993272 0.3088115 0.3255970
#
# $`2`
# [1] 0.21775479 0.98620413 0.25035841 0.31131319 0.48057769 0.98633571
# [7] 0.20208590 0.39117415 0.55579118 0.23737710 0.37548844 0.20139280
# [13] 0.49689904 0.34500830 0.19796570 0.45113871 0.20210998 0.51241253
# [19] 0.49254870 0.50922946 0.20125218 0.21230656 0.23612062 0.13508699
# [25] 0.48944306
The list3
основан на двух предыдущих списках, то есть, первый элемент list1
это число, связанное с p-значение первого элемента list2
. Поэтому list3
включает в себя все pvalues, соответствующие одному номеру, например, все pvalues для номера 2. До сих пор меня интересовало построение списка матриц, в которых элементы list1
были заменены на выборки элементов из list3
с тем же номером. Моя команда, чтобы сделать это было:
list4 <- lapply(list1, function(x) sapply(x, function(i, l)
sample(l[[as.character(i)]], 10, replace=T), l=list3))
И эта команда дала мне этот вид продукции
list4[[2]]
# [,1] [,2] [,3] [,4]
# [1,] 0.7983852 0.29404183 0.2416229 0.3018420
# [2,] 0.7398054 0.41266109 0.9253389 0.3249007
# [3,] 0.1150981 0.24138907 0.4040050 0.8335943
# [4,] 0.4564887 0.28336511 0.2520307 0.5460348
# [5,] 0.2810911 0.92870457 0.6865136 0.4851188
# [6,] 0.6396584 0.68957506 0.8336891 0.1355544
# [7,] 0.3365557 0.01609222 0.2504679 0.1974983
# [8,] 0.2307067 0.99999000 0.8328432 0.6538944
# [9,] 0.9999900 0.84980684 0.5590235 0.2566799
# [10,] 0.5791690 0.27672559 0.3584696 0.8335943
Однако, теперь я хочу, чтобы построить перестановки для каждого кластера, но избегая пробовать pvalues о том, что кластер в list3
. Таким образом, и в качестве примера, для list1['cluster.1]
я хотел бы удалить из list3
значения paleues от list2['cluster.1']
и то же самое для остальных кластеров в list1
.
Любая помощь будет очень признательна.
Большое спасибо
UPDATE,
После комментариев я обновлю процесс, чтобы получить эти списки и окончательный вывод желания. Эти списки приходят из data.frame с ~ 17000 строк и 3 столбцов, и пример выглядит следующим образом:
head(pvals)
# gene pval mac
#1 A1CF 0.896076585 26
#2 ABCC2 0.376808322 571
#3 ABI1 0.048601644 27
#4 ABLIM1 0.729589080 63
#5 ACADSB 0.001609905 50
#6 ACBD5 0.446628090 11
list3
происходит от разделения на колонке макинтош в pvals
data.frame:
split.mac = split(pvals, pvals[,3])
mac.pval = lapply(split.mac, '[[', 2)
pvals.order <- pvals[order(pvals$mac),]
Затем сгенерировать список, содержащий каждый элемент, по меньшей мере 100 генов
l3 <- list()
ll1 <- length(mac.pval)
length(l3) <- ll1
set.seed(4)
for (i in 1:ll1) {
vec1 <- mac.pval[[i]]
jl <- 1; jr <- 1;
while (length(vec1) < 100) {
if(i==1 || i-jl==0) {
vec1 <- c(vec1, mac.pval[[i+jr]])
jr <- jr+1
} else if (i==ll1 || jr+i==ll1) {
vec1 <- c(vec1, mac.pval[[i-jl]])
jl <- jl+1
} else {
vec1 <- c(vec1, mac.pval[[i-jl]], mac.pval[[i+jr]])
jl <- jl+1
jr <- jr+1
}
}
l3[[i]] <- vec1
}
names(l3) <- names(mac.pval)
list3 <- l3
clusters <- strsplit(readLines("clusters.txt"), "\t") # the output is a list with gene names
Затем list1
и «песни2 are generated matching the
pvalues` data.frame
list2 <- lapply(clusters, function(x) {
pvals[match(as.character(unlist(x)), as.character(pvals[[1]])), 2]
}) # the output is a list with the `mac` column of `pvals`
list1 <- lapply(clusters, function(x) {
pvals[match(as.character(unlist(x)), as.character(pvals[[1]])), 3]
}) # the output is a list with the `pval` column of `pvals`
Наконец, используя list3
и list1
я получить список (list4
) с числом перестановок быть строками и столбцами количества элементов в этом кластере. До сих пор меня интересовала выборка во всей группе генов с тем же mac
, но теперь я хотел бы удалить из каждого из выборок значения p, соответствующие в кластере для этой выборки. Функция я использовал для перестановки такова:
list4 <- lapply(list1, function(x) sapply(x, function(i, l) {
sample(l[[as.character(i)]], 10, replace=T)
}, l=list3))
Надежда это обновление поможет получить ответ,
спасибо
Можете ли вы 'dput()' ваши списки и, возможно, расширить свое описание желаемого результата? – vpipkt
На @vpipkt вы можете опубликовать процесс, который сгенерировал эти списки – miles2know
Мои данные @vpipkt очень велики, список1 представляет собой список 2418 с числовой переменной элементов (min = 3 max = 147), а в моем случае list4 должен быть списком данных с 10 000 строк и так много столбцов как элементов в его соответствующих списках1 и 2, т. е. если list1 [[2]] имеет 4 элемента list3 [[1]] будет иметь тусклый 10 000 строк и 4 столбца – user2380782