#r #list #concatenation
Вопрос:
В R у меня есть ряд списков с увеличивающимися числовыми суффиксами , например mylist1 , mylist2, mylist3. Я хочу объединить их , например, c(mylist1, mylist2, mylist3).
Есть ли сокращенный способ справиться с этим?
Комментарии:
1. Пожалуйста, объясните, что вы подразумеваете под «объединением»
2. Или вы хотите создать один список, объединив списки?
3. Я не хочу сливаться. Добавление может быть лучшим термином, чем объединение
Ответ №1:
Я думаю, что вы пытаетесь создать список списков. Вы можете сделать это, просто позвонив:
list(list1, list2, list3)
Если у вас много списков с похожим шаблоном имен, вы можете выбрать использовать mget
, чтобы ПОЛУЧИТЬ все объекты, имена которых имеют определенный шаблон, ( ls(pattern=x)
).
данные
list8<-list(1,2)
list9<-list(3,4)
list10<-list(5,6)
#Included the lists with indexes 8:10 so that the importance of ordering by `parse_number(ls)` is highlighted. Without the `parse_number` step, the list would be sorted by names, with a different order
Ответ
list_of_lists<-mget(ls(pattern = 'list\d ')[order(parse_number(ls(pattern = 'list\d ')))])
> str(list_of_lists)
List of 3
$ mylist8:List of 2
..$ : num 1
..$ : num 2
$ mylist9:List of 2
..$ : num 3
..$ : num 4
$ mylist10:List of 2
..$ : num 5
..$ : num 6
Комментарии:
1. Спасибо. mget выполняет работу по составлению списка списков, но я хотел объединить их, добавив вместе. Итак, используя ваш пример, я хотел c(список 8 , список 9, список 10), создав список из 6 объектов. Я мог бы сделать второй шаг
unlist (list_of_lists, recursive = F)
, чтобы получить то, что мне нужно, но все же интересно посмотреть, есть ли одноэтапный процесс2. Другим базовым вариантом , который все еще использует промежуточный этап создания списка списков, было бы использование
Reduce (append, mget(paste0("list", c(8:10))))
, но мне все еще интересно узнать, есть ли способ без создания промежуточного списка списков3. Способы, которые вы описываете, кажутся достаточно простыми, что еще вы могли там найти?