R Списки

Список — это коллекция объектов в языке R, которая может использоваться для хранения различных типов данных, включая числа, строки, векторы, другой список, матрицу, датафрейм и т. д., и, конечно, он также может содержать матрицы и функции.

Список — это гибкая структура данных, которая может хранить различные типы объектов данных и манипулировать ими.

Создание списков

Чтобы создать список в языке R, используйте функциюlist().

В следующем примере мы создаем список, содержащий строки, векторы и числа:

Пример

list_data <- list("example", "google", c(11,22,33), 123, 51.23, 119.1)
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.
Другие расширения