Я использую R, и я новичок. У меня есть два больших списка (каждый 30K элементов). Один из них называется descriptions
и где каждый элемент является (может быть) обозначенной строкой. Другой называется probes
, где каждый элемент является числом. Мне нужно сделать словарь, который отображает probes
на что-то в descriptions
, если это что-то есть. Вот как я буду об этом:Замена R-thonic для простых циклов, содержащих условие
probe2gene <- list()
for (i in 1:length(probes)){
strings<-strsplit(descriptions[i]), '//')
if (length(strings[[1]]) > 1){
probe2gene[probes[i]] = strings[[1]][2]
}
}
Который работает хорошо, но, кажется, медленно, гораздо медленнее, чем примерно эквивалентный питона:
probe2gene = {}
for p,d in zip(probes, descriptions):
try:
probe2gene[p] = descriptions.split('//')[1]
except IndexError:
pass
Мой вопрос: есть ли «R-thonic» способ делать то, что я пытаюсь сделать? R manual entry on for loops предполагает, что такие петли редки. Есть ли лучшее решение?
Edit: типичный хороший "описание" выглядит следующим образом:
"NM_009826 // Rb1cc1 // RB1-inducible coiled-coil 1 // 1 A2 // 12421 /// AB070619 // Rb1cc1 // RB1-inducible coiled-coil 1 // 1 A2 // 12421 /// ENSMUST00000027040 // Rb1cc1 // RB1-inducible coiled-coil 1 // 1 A2 // 12421"
плохой «Описание: выглядит как этот
"-----"
, хотя это вполне может быть легко некоторые другие не-very- Полезная строка: каждый зонд представляет собой просто номер. Векторы имеют одинаковую длину и полностью соответствуют друг другу, т.е. probe[i]
соответствует description[i]
.
«R-thonic» :) Разве это не Ric? – Skilldrick
Небольшой образец данных будет полезен. – Shane
Это определенно «пиратский». – Harlan