Извлечение из списка с элементами разных размеров R - PullRequest
0 голосов
/ 27 марта 2020

В настоящее время я работаю со списком элементов, которые имеют различные значения, возвращаемые из str_locate_all (). Он возвращает список, который выглядит следующим образом:

library(stringr)
location <- str_locate_all(pattern = matched_query, query_string)
location

[[1]]
     start end
[1,]     1  3

[[2]]
     start end
[1,]     2  4
[2,]    11  13
[3,]   221 223

[[3]]
     start end
[1,]    12  14
[2,]   222 224

[[4]]
     start end
[1,]    20  22

Я хотел бы установить подмножество списка, чтобы получить и отделить все значения в разделах «начало» и «конец». c(1,2,11,221,12,222,20) c(3,4,13,223,14,224,22)

Когда я удаляю их, группы с несколькими совпадениями не сохраняют шаблон «старт», «стоп», «старт», «стоп» - у них есть «старт», «старт» ». стоп "стоп" шаблон.

Пока что я пробовал:

 sapply(location,'[[',1)
1   2   12   20
lapply(query_wordsize_location,'[[',1)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 12

[[4]]
[1] 20
location[[1]][,1]

start 
    1 

location[[1:4]][,1]
Error in location[[1:4]] : 
  recursive indexing failed at level 2

Я мог бы заставить его работать с al oop, но я пытаюсь избежать этого, так как это довольно большой список.

1 Ответ

0 голосов
/ 27 марта 2020

Вы хотите использовать do.call в этом сценарии.

location <- list(matrix(1:6, ncol = 2), matrix(1:4, ncol = 2), 
                 matrix(1:2, ncol = 2), matrix(1:6, ncol = 2))
location
# [[1]]
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6
#
# [[2]]
#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4
#  
# [[3]]
#      [,1] [,2]
# [1,]    1    2
#
# [[4]]
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6

do.call(rbind, location)
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6
# [4,]    1    3
# [5,]    2    4
# [6,]    1    2
# [7,]    1    4
# [8,]    2    5
# [9,]    3    6
...