R: суммируйте элементы каждого списка в списке и возвращайте результат во фрейме данных
У меня есть список списков в R; каждый список содержит результаты команды Grep, указывающей позицию, в которой была найдена строка поиска. Команда
> matches<-lapply(ListOfFiles, function(x)
+ grep("SearchString",readLines(x),ignore.case = T))
Производит
//I copy the results that the function actually yields for the sake of the example
> matches<-list(c(11L, 13L), c(9L, 12L, 14L, 15L, 16L, 19L, 20L, 22L, 25L
+ ), c(5L, 8L, 11L), c(10L, 11L, 13L, 14L, 16L), c(5L, 7L, 9L),
+ integer(0))
> matches
[[1]]
[1] 11 13
[[2]]
[1] 9 12 14 15 16 19 20 22 25
[[3]]
[1] 5 8 11
[[4]]
[1] 10 11 13 14 16
[[5]]
[1] 5 7 9
[[6]]
integer(0)
Мне нужно преобразовать это в простой фрейм данных из 6 строк и 1 столбца, причем каждая "ячейка" имеет сумму каждого из 6 списков matches
.
Если это вообще возможно, пожалуйста, попытайтесь объяснить синтаксис, который я должен использовать; я новичок в R, и иногда мне трудно следовать примерам, если несколько вещей вложены сразу.
1 ответ:
На самом деле я только что понял это сам. Ответ таков:
Первая часть представляет собой список списков с одним элементом в каждом, суммирование элементов каждого спискаdata.frame(unlist(lapply(matches, function(x) sum(x))))
> lapply(matches, function(x) sum(x)) [[1]] [1] 24 [[2]] [1] 152 [[3]] [1] 24 [[4]] [1] 64 [[5]] [1] 21 [[6]] [1] 0
Вторая часть генерирует вектор из этого. Очевидно, это рекурсивная функция:
Наконец, он преобразуется в фрейм данных с помощью функции> unlist(lapply(matches, function(x) sum(x))) [1] 24 152 24 64 21 0
data.frame()
.