Учитывая список из 16 элементов, где каждый элемент является именованным числовым вектором, я хочу построить длину пересечения имен между каждыми двумя элементами. То есть; пересечение элемента 1 с элементом 2, элемента элемента 3 с элементом 4 и т. д.Запланировать пересечение в каждом из двух элементов списка
Хотя я могу сделать это очень утомительно, с низкой пропускной способностью, мне придется повторить такой анализ, поэтому Я бы хотел более программный способ сделать это.
В качестве примера, первые 5 записей первых 2 элементов списка являются:
topGenes[[1]][1:5]
3398 284353 219293 7450 54658
2.856363 2.654106 2.653845 2.635599 2.626518
topGenes[[2]][1:5]
1300 64581 2566 5026 146433
2.932803 2.807381 2.790484 2.739735 2.705030
Здесь первая строка чисел идентификаторы генов & Я хочу знать, сколько каждая пара векторов (а лечение повторности) имеют в общем, в том числе, скажем, топ 100.
Я попытался с помощью lapply() следующим образом:
vectorOfIntersectLengths <- lapply(topGenes, function(x) lapply(topGenes, function(y) length(intersect(names(x)[1:100],names(y)[1:100]))))
Это только кажется, о на первых двух элементах; topGenes [[1]] & topGenes [[2]].
Я также пытался сделать это с помощью цикла for(), но я не уверен, как это записать. Что-то вроде этого:
lengths <- c()
for(i in 1:length(topGenes)){
lens[i] <- length(intersect(names(topGenes[[i]][1:200]),
names(topGenes[[i+1]][1:200])))
}
Это возвращает ошибку «индекс за пределами границ», которую я действительно не понимаю.
Большое спасибо за помощь!
возможно см. '? Expand.grid', но я не совсем уверен, что вы просите. не могли бы вы предоставить 'dput (topGenes)' или представительный пример подмножества? – C8H10N4O2
Несомненно. Вот первые 10 записей первых двух элементов списка: – Forest
Извините, слишком скоро нажмите «ввести» в ответ. Я редактировал сообщение для (надеюсь) ясности. – Forest