Извлечь объект из списка на основе имени элемента в R - PullRequest
1 голос
/ 29 апреля 2020

У меня есть список из 94 матриц, подмножество которых показано здесь:

 > summary(full_matrix)

            Length Class  Mode   
 Alex_1         64 -none- numeric
 Alex_10      2500 -none- numeric
 Alex_11      2916 -none- numeric
 Alex_12     20736 -none- numeric
 Lily_1        441 -none- numeric
 Lily_10     57600 -none- numeric
 Lily_11     94249 -none- numeric
 Lily_12    167281 -none- numeric
 Lily_13    206116 -none- numeric
 Naima_1       169 -none- numeric
 Naima_10   209764 -none- numeric
 Naima_11   262144 -none- numeric
 Naima_12   209764 -none- numeric
 Naima_13   177241 -none- numeric
 Naima_14   143641 -none- numeric

Я запускаю некоторый код для каждой из этих матриц, что я могу успешно сделать, используя lapply(). Тем не менее, код работает очень медленно, и для его полного заполнения требуются часы и часы. Поэтому я хочу разделить список по имени элемента. Я успешно сделал это вручную, используя subset_matrix <- full_matrix[1:4], что в этом примере даст:

 > summary(subset_matrix)
         Length Class  Mode   
 Alex_1     64  -none- numeric
 Alex_10  2500  -none- numeric
 Alex_11  2916  -none- numeric
 Alex_12 20736  -none- numeric

Однако это неуклюже и запутается, если я внесу какие-либо изменения в предыдущие части моего скрипта. Что я хотел бы сделать, это выбрать все элементы, содержащие "Alex_", "Lily_", "Naima_" и др. c, и создать их подсписки. Я думал, это решение может работать, но оно дает мне пустой список:

 > matrix_alex <- full_matrix[c("Alex_")] # subset for individual infants
 > summary(matrix_alex)
      Length Class  Mode
  <NA> 0      -none- NULL

1 Ответ

1 голос
/ 29 апреля 2020

"Alex_" - это не имя в вашем списке.

names(full_list)
# [1] "Alex_01"  "Alex_02"  "Alex_03"  "Bella_01" "Bella_02" "Bella_03"

Вы можете использовать grep, который ищет шаблон.

subset_list <- full_list[grep("Alex_", names(full_list))]
# $Alex_01
# [,1]
# [1,]   NA
# 
# $Alex_02
# [,1]
# [1,]   NA
# 
# $Alex_03
# [,1]
# [1,]   NA

Данные:

full_list <- list(Alex_01=matrix(),
                  Alex_02=matrix(),
                  Alex_03=matrix(),
                  Bella_01=matrix(),
                  Bella_02=matrix(),
                  Bella_03=matrix())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...