Я хочу вытащить в seq.df белки (один столбец df), которые соответствуют индексам в сопоставлении map.list (список списков).
Пример данных:
seq.df<- rbind.data.frame("MTHISPAVYGLWAIMSVLLAAFCAY",
"MERSSAIVFPNVGTSVLSATIHLVGVTVLAHLISRRTALRGTST",
"MLFEPFWCLLDLLRWSLDTHYIPAKRPLNGGGRSSNFD")
map.list<- list(a<- list(2,3,4,5,6,7),
b<- list(13,14,30,31,32),
c<- list(5,6,10,11))
Желаемый вывод:
THISPA
GTAHL
PFLD
Если я запускаю вложенное приложение только для первого подсписка map.list, я получаю то, что хочу для первого белка:
prot.list<- apply(seq.df, 1, function (x) lapply(map.list[[1]], function (y) substring(x, y, y)))
возвращает ожидаемый результат для первой последовательности (THISPA,)
Но я не уверен, как заставить эту функцию повторяться по всем подспискам в map.list.Я попытался обернуть это в цикл for, но он не дает ожидаемого результата:
for (i in seq_along(map.list)){
each.map.list<- map.list[[i]]
prot.list<- apply(seq.df, 1, function (x) lapply(each.map.list, function (y) substring(x, y, y)))
}
Вывод:
SPGL
SAPN
PFLD
Я бы предпочел добавить еще одно выражение lapply,но я не уверен, как указать каждый список в map.list
#this does not work, but something like:
prot.list<- apply(seq.df, 1, function (x) lapply(map.list, function (y) lapply([[y]], function (z) substring(x, z, z)))