#r #list
#r #Список
Вопрос:
Каков правильный способ вернуть новый список с некоторыми, но не со всеми элементами списка, на которые ссылаются по имени? Например:
$`listA`
[1] 1 2 3 4 5
$listB
[1] "a" "b" "c" "d" "e"
$listC
[1] 25 26 27 28 29 30
должно стать:
$`listA`
[1] 1 2 3 4 5
$listC
[1] 25 26 27 28 29 30
Вот некоторые данные:
list1 <- 1:10
list2 <- letters[1:26]
list3 <- 25:32
mylist <- list(list1,list2,list3)
names(mylist) <- c("listA", "listB", "listC")
Комментарии:
1.
mylist[c("listA", "listC")]
2. И если вы хотите удалить некоторые из них, сделайте:
mylist[c("listA","listB")] = NULL
Ответ №1:
Самый простой способ — использовать [
оператор, подобный:
mylist[c("listA", "listC")]
Вывод:
$`listA`
[1] 1 2 3 4 5 6 7 8 9 10
$listC
[1] 25 26 27 28 29 30 31 32
Обратите внимание, что при выборе одного элемента из списка с помощью [
результат может быть не таким, как мы ожидаем:
mylist["listA"]
Вывод:
$`listA`
[1] 1 2 3 4 5 6 7 8 9 10
> class(mylist["listA"])
[1] "list"
Здесь мы видим, что выбор элемента "listA"
с помощью [
не возвращает сам элемент, а вместо этого возвращает список, содержащий "listA"
элемент. Если мы хотим подмножество самого элемента по имени, мы должны использовать [[
оператор:
mylist[["listA"]]
Вывод:
[1] 1 2 3 4 5 6 7 8 9 10
> class(mylist[["listA"]])
[1] "integer"
Другое различие между [
и [[
заключается в том, [[
что их можно использовать только для выбора одного элемента. Например, следующее не будет работать:
mylist[[c("listA", "listC")]]
Ошибка в mylist[[c(«listA», «listC»)]]: нижний индекс выходит за пределы