R Списки
Список — это коллекция объектов в языке R, которая может использоваться для хранения различных типов данных, включая числа, строки, векторы, другой список, матрицу, датафрейм и т. д., и, конечно, он также может содержать матрицы и функции.
Список — это гибкая структура данных, которая может хранить различные типы объектов данных и манипулировать ими.
Создание списков
Чтобы создать список в языке R, используйте функциюlist().
В следующем примере мы создаем список, содержащий строки, векторы и числа:
Пример
print(list_data)
Выполнение приведенного выше кода дает следующий вывод:
[[1]] [1] "example" [[2]] [1] "google" [[3]] [1] 11 22 33 [[4]] [1] 123 [[5]] [1] 51.23 [[6]] [1] 119.1
Мы также можем использоватьc()функцию для создания списков, а также можем использовать эту функцию для объединения нескольких объектов в один список, например:
my_list <- c(object1, object2, object3)
Пример
numbers <- c(1, 2, 3, 4, 5)
# Создать вектор, содержащий символы
characters <- c("apple", "banana", "orange")
# Объединить два числовых вектора
merged_vector <- c(numbers, c(6, 7, 8))
# Объединить два символьных вектора
merged_characters <- c(characters, c("grape", "melon"))
Мы можем использовать функциюnames()для именования элементов списка:
Пример
list_data <- list(c("Google","Example","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
list("example",12.3))
# Задать имена для элементов списка
names(list_data) <- c("Sites", "Numbers", "Lists")
# Вывести список
print(list_data)
Выполнение приведенного выше кода дает следующий вывод:
$Sites
[1] "Google" "Example" "Taobao"
$Numbers
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
$Lists
$Lists[[1]]
[1] "example"
$Lists[[2]]
[1] 12.3
Доступ к спискам
Доступ к элементам списка можно получить с помощью индексов. Если вы используете функциюnames(), чтобы дать им имена, мы также можем обращаться к ним по соответствующим именам:
Пример
list_data <- list(c("Google","Example","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
list("example",12.3))
# Задать имена для элементов списка
names(list_data) <- c("Sites", "Numbers", "Lists")
# Вывести список
print(list_data[1])
# Доступ к третьему элементу списка
print(list_data[3])
# Доступ к первому элементу вектора
print(list_data$Numbers)
Выполнение приведенного выше кода дает следующий вывод:
$Sites
[1] "Google" "Example" "Taobao"
$Lists
$Lists[[1]]
[1] "example"
$Lists[[2]]
[1] 12.3
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
Манипулирование элементами списка
Мы можем добавлять, удалять и обновлять элементы списка, как показано в следующем примере:
Пример
list_data <- list(c("Google","Example","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
list("example",12.3))
# Задать имена для элементов списка
names(list_data) <- c("Sites", "Numbers", "Lists")
# Добавить элемент
list_data[4] <- "New element"
print(list_data[4])
# Удалить элемент
list_data[4] <- NULL
# Вывод после удаления — NULL
print(list_data[4])
# Обновить элемент
list_data[3] <- "Я заменил третий элемент"
print(list_data[3])
Выполнение приведенного выше кода дает следующий вывод:
[[1]] [1] "新元素" $<NA> NULL $Lists [1] "我替换来第三个元素"
Использование циклаforдля перебора списка:
Пример
my_list <- список(1, 2, 3, "a", "b", "c")
# Использовать цикл for для перебора каждого элемента в списке
for (element in my_list) {
print(element)
}
В приведённом выше коде цикл for перебирает каждый элемент списка my_list по порядку и сохраняет каждый элемент в переменной element. Затем мы можем выполнять определённые операции с каждым элементом внутри тела цикла, например использовать функцию print() для вывода значения элемента.
При переборе списка с помощью цикла for каждая итерация присваивает текущий элемент переменной element. Поэтому внутри тела цикла можно выполнять любые необходимые операции с element, например вычисления, проверки условий и т. д.
Обратите внимание, что при переборе списка с помощью цикла for переменная цикла element будет поочерёдно принимать каждый элемент списка, но она не может напрямую изменять сам элемент списка. Если вам нужно изменить значение элемента в списке, это можно сделать с помощью индексации, напримерmy_list[[index]] <- new_value。
Выполнение приведенного выше кода дает следующий вывод:
[1] 1 [1] 2 [1] 3 [1] "a" [1] "b" [1] "c"
Объединение списков
Мы можем использоватьc()функцию для объединения нескольких списков в один список:
Пример
list1 <- list(1,2,3)
list2 <- list("Google","Example","Taobao")
# Объединить списки
merged.list <- c(list1,list2)
# Отобразить объединённый список
print(merged.list)
Выполнение приведенного выше кода дает следующий вывод:
[[1]] [1] 1 [[2]] [1] 2 [[3]] [1] 3 [[4]] [1] "Google" [[5]] [1] "Example" [[6]] [1] "Taobao"
Преобразование списков в векторы
Чтобы преобразовать список в вектор, можно использовать функциюunlist(). Преобразование списка в вектор позволяет нам удобно выполнять арифметические операции:
Пример
list1 <- list(1:5)
print(list1)
list2 <-list(10:14)
print(list2)
# Преобразовать в вектор
v1 <- unlist(list1)
v2 <- unlist(list2)
print(v1)
print(v2)
# Сложить два вектора
result <- v1+v2
print(result)
Выполнение приведенного выше кода дает следующий вывод:
[[1]] [1] 1 2 3 4 5 [[1]] [1] 10 11 12 13 14 [1] 1 2 3 4 5 [1] 10 11 12 13 14 [1] 11 13 15 17 19
Итог
Ниже приведены некоторые часто используемые операции и функции для списков в языке R:
Создание списков:
- Использованиеc()функции: например, list1 <- c(1, 2, 3) создает список, содержащий 1, 2 и 3.
- Использование функцииlist(): например, list2 <- list(1, "a", TRUE) создает список, содержащий элементы разных типов.
Доступ к элементам списка:
- Использование индексов: доступ к элементам списка по индексу. Например, list1
- Использование имен элементов: если элементы списка имеют имена, можно использовать эти имена для доступа к ним. Например, с list3 <- list(a = 1, b = 2) можно получить доступ к элементам через list3$a и list3$b.
Операции со списками:
- Длина: используйте функцию length(), чтобы получить длину списка. Например, length(list1) возвращает длину списка list1.
- Объединение: используйте функцию c() или функцию append(), чтобы объединить два или более списков в один список. Например, list4 <- c(list1, list2) объединяет списки list1 и list2.
- Добавление элементов: используйте функцию c(), чтобы добавить элемент в существующий список. Например, list1 <- c(list1, 4) добавляет 4 в конец списка list1.
- Удаление элементов: используйте индексы и оператор отрицательного индекса - для удаления элементов из списка. Например, list1 <- list1[-2] удаляет второй элемент в списке list1.
Итерация по списку:
- Цикл for: используйте цикл for для перебора элементов в списке. Например,for (element in list1) { ... }перебирает каждый элемент в списке list1.
- lapply()Функция lapply(): применяет функцию к каждому элементу в списке и возвращает результирующий список. Например, new_list <- lapply(list1, function(x) x * 2) умножает каждый элемент в списке list1 на 2.