R - Listy

Listy to obiekty R, które zawierają elementy różnych typów, takie jak - liczby, ciągi znaków, wektory i inna lista wewnątrz nich. Lista może również zawierać macierz lub funkcję jako jej elementy. Lista jest tworzona za pomocąlist() funkcjonować.

Tworzenie listy

Poniżej znajduje się przykład tworzenia listy zawierającej ciągi, liczby, wektory i wartości logiczne.

# Create a list containing strings, numbers, vectors and a logical
# values.
list_data <- list("Red", "Green", c(21,32,11), TRUE, 51.23, 119.1)
print(list_data)

Kiedy wykonujemy powyższy kod, daje on następujący wynik -

[[1]]
[1] "Red"

[[2]]
[1] "Green"

[[3]]
[1] 21 32 11

[[4]]
[1] TRUE

[[5]]
[1] 51.23

[[6]]
[1] 119.1

Nazewnictwo elementów listy

Elementom listy można nadać nazwy i można uzyskać do nich dostęp przy użyciu tych nazw.

# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Show the list.
print(list_data)

Kiedy wykonujemy powyższy kod, daje on następujący wynik -

$`1st_Quarter`
[1] "Jan" "Feb" "Mar"

$A_Matrix
     [,1] [,2] [,3]
[1,]    3    5   -2
[2,]    9    1    8

$A_Inner_list
$A_Inner_list[[1]]
[1] "green"

$A_Inner_list[[2]]
[1] 12.3

Dostęp do elementów listy

Dostęp do elementów listy można uzyskać poprzez indeks elementu na liście. W przypadku list nazwanych można uzyskać do niego dostęp również za pomocą nazw.

Nadal korzystamy z listy w powyższym przykładzie -

# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Access the first element of the list.
print(list_data[1])

# Access the thrid element. As it is also a list, all its elements will be printed.
print(list_data[3])

# Access the list element using the name of the element.
print(list_data$A_Matrix)

Kiedy wykonujemy powyższy kod, daje on następujący wynik -

$`1st_Quarter`
[1] "Jan" "Feb" "Mar"

$A_Inner_list
$A_Inner_list[[1]]
[1] "green"

$A_Inner_list[[2]]
[1] 12.3

     [,1] [,2] [,3]
[1,]    3    5   -2
[2,]    9    1    8

Manipulowanie elementami listy

Możemy dodawać, usuwać i aktualizować elementy listy, jak pokazano poniżej. Dodawać i usuwać elementy możemy tylko na końcu listy. Ale możemy zaktualizować dowolny element.

# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Add element at the end of the list.
list_data[4] <- "New element"
print(list_data[4])

# Remove the last element.
list_data[4] <- NULL

# Print the 4th Element.
print(list_data[4])

# Update the 3rd Element.
list_data[3] <- "updated element"
print(list_data[3])

Kiedy wykonujemy powyższy kod, daje on następujący wynik -

[[1]]
[1] "New element"

$<NA>
NULL

$`A Inner list`
[1] "updated element"

Łączenie list

Możesz połączyć wiele list w jedną listę, umieszczając wszystkie listy wewnątrz jednej funkcji list ().

# Create two lists.
list1 <- list(1,2,3)
list2 <- list("Sun","Mon","Tue")

# Merge the two lists.
merged.list <- c(list1,list2)

# Print the merged list.
print(merged.list)

Kiedy wykonujemy powyższy kod, daje on następujący wynik -

[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] "Sun"

[[5]]
[1] "Mon"

[[6]]
[1] "Tue"

Konwersja listy do wektora

Listę można przekonwertować na wektor, dzięki czemu elementy wektora mogą być użyte do dalszej manipulacji. Wszystkie działania arytmetyczne na wektorach można zastosować po przekonwertowaniu listy na wektory. Aby wykonać tę konwersję, używamy rozszerzeniaunlist()funkcjonować. Pobiera listę jako dane wejściowe i tworzy wektor.

# Create lists.
list1 <- list(1:5)
print(list1)

list2 <-list(10:14)
print(list2)

# Convert the lists to vectors.
v1 <- unlist(list1)
v2 <- unlist(list2)

print(v1)
print(v2)

# Now add the vectors
result <- v1+v2
print(result)

Kiedy wykonujemy powyższy kod, daje on następujący wynik -

[[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