#r #list #extraction #iranges
#r #Список #извлечь #iranges
Вопрос:
У меня есть список индексов позиций в списке целых чисел, и я намеревался отфильтровать их по заданному порогу, и это работает хорошо. Тем не менее, я хочу извлечь один из определенного отфильтрованного набора для каждого списка целых чисел для дальнейшего использования. Я знаю, что myList — это вложенный список, и данные в значительной степени моделируются на основе реального набора данных. Есть ли какой-либо способ легко и элегантно извлечь требуемый список целых чисел? Как я могу сделать так, чтобы это извлечение произошло?
Для запуска мини-примера необходима следующая библиотека:
library(IRanges)
library(S4Vectors)
мини-пример :
myList <- list(f1=IntegerList(1,2,3,4,1,1,1,integer(0),1,2,4),
f2=IntegerList(1,5,integer(0),integer(0),2,3,4,6,1,5,6),
f3=IntegerList(1,4,6,7,2,3,3,7,2,5,7))
len <- Reduce(' ', lapply(myList, lengths))
keepMe <- len >= length(myList)
Я намеревался отфильтровать их следующим образом:
res.filt <- lapply(myList, function(elm) {
ans <- list(keep=elm[keepMe], droped=elm[!keepMe])
ans
})
мой грубый вывод :
Keep.list <- list(f1.kp=res.filt$f1$keep, f2.kp=res.filt$f2$keep, f3.kp=res.filt$f3$keep)
Drop.list <- list(f1.dp=res.filt$f1$droped, f2.dp=res.filt$f2$droped, f3.dp=res.filt$f3$droped)
Основываясь на моем приблизительном выводе, как я могу получить более элегантный вывод? любой эффективный способ добиться моего результата? Кто-нибудь может указать мне, как это сделать? Или любое предложение, как получить мой ожидаемый результат? Заранее спасибо
Комментарии:
1. Не могли бы вы точно объяснить, что вы подразумеваете под «более элегантным»?
2. Я просто не понимаю, говорите ли вы о результатах, коде или форматировании вывода
3. Спасибо за быстрый ответ. У меня есть решение 🙂
Ответ №1:
Ваш мыслительный процесс / поток для фильтрации векторных списков логичен и довольно оптимален, но вы можете немного ужесточить его, если используете purrr
:
library(purrr)
map(myList, lengths) %>%
reduce(` `) %>%
map_lgl(`>=`, length(myList)) -> keep_me
keep_list <- map(myList, ~.[keep_me])
drop_list <- map(myList, ~.[!keep_me])
Комментарии:
1. Это замечательное решение. Я отдаю должное разработчику пакетов purrr. Большое вам спасибо 🙂
2. Добро пожаловать! Хотя на самом деле это просто то, что вы делали. Код немного компактнее. У вас было прекрасное рабочее решение.