📜  R列表

📅  最后修改于: 2021-01-08 09:41:25             🧑  作者: Mango

R列表

在R中,列表是向量的第二种类型。列表是R的对象,其中包含不同类型的元素,例如数字,向量,字符串和其中的另一个列表。它也可以包含一个函数或矩阵作为其元素。列表是一种数据结构,具有混合数据类型的组件。可以说,列表是包含其他对象的通用向量。

vec <- c(3,4,5,6)
char_vec<-c("shubham","nishka","gunjan","sumit")
logic_vec<-c(TRUE,FALSE,FALSE,TRUE)
out_list<-list(vec,char_vec,logic_vec)
out_list

输出:

[[1]]
[1] 3 4 5 6
[[2]]
[1] "shubham" "nishka"  "gunjan"  "sumit"
[[3]]
[1]  TRUE FALSE FALSE  TRUE

列出创建

创建列表的过程与矢量相同。在R中,借助c()函数创建向量。像c()函数,还有另一个函数,即list()用于在R中创建列表。列表避免了向量(数据类型)的缺点。我们可以在不同数据类型的列表中添加元素。

句法

list()

示例1:创建具有相同数据类型的列表

list_1<-list(1,2,3)
list_2<-list("Shubham","Arpita","Vaishali")
list_3<-list(c(1,2,3))
list_4<-list(TRUE,FALSE,TRUE)
list_1
list_2
list_3
list_4

输出:

[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3

[[1]]
[1] "Shubham"
[[2]]
[1] "Arpita"
[[3]]
[1] "Vaishali"

[[1]]
[1] 1 2 3

[[1]]
[1] TRUE
[[2]]
[1] FALSE
[[3]]
[1] TRUE

示例2:创建具有不同数据类型的列表

list_data<-list("Shubham","Arpita",c(1,2,3,4,5),TRUE,FALSE,22.5,12L)
print(list_data)

在上面的示例中,列表函数将创建一个包含字符,逻辑,数字和vector元素的列表。它将给出以下输出

输出:

[[1]]
[1] "Shubham"
[[2]]
[1] "Arpita"
[[3]]
[1] 1 2 3 4 5
[[4]]
[1] TRUE
[[5]]
[1] FALSE
[[6]]
[1] 22.5
[[7]]
[1] 12

命名列出元素

R提供了一种非常简单的方式来访问元素,即,为列表的每个元素指定名称。通过为元素分配名称,我们可以轻松访问元素。仅需三个步骤即可print与名称相对应的列表数据:

  • 创建一个列表。
  • 借助names()函数为列表元素分配名称。
  • 打印列表数据。

让我们看一个示例,以了解如何将名称赋予列表元素。

# Creating a list containing a vector, a matrix and a list.
list_data <- list(c("Shubham","Nishka","Gunjan"), matrix(c(40,80,60,70,90,80), nrow = 2),
   list("BCA","MCA","B.tech"))

# Giving names to the elements in the list.
names(list_data) <- c("Students", "Marks", "Course")

# Show the list.
print(list_data)

输出:

$Students
[1] "Shubham" "Nishka"  "Gunjan"

$Marks
     [,1] [,2] [,3]
[1,]   40   60   90
[2,]   80   70   80

$Course
$Course[[1]]
[1] "BCA"

$Course[[2]]
[1] "MCA"

$Course[[3]]
[1] "B. tech."

访问列表元素

R提供了两种访问列表元素的方式。第一个是以与向量相同的方式执行的索引方法。在第二篇文章中,我们可以借助名称来访问列表的元素。只有命名列表才有可能。如果列表正常,则无法使用名称访问列表的元素。

让我们看一下这两种方法的示例,以了解如何在列表中使用它们来访问元素。

示例1:使用索引访问元素

# Creating a list containing a vector, a matrix and a list.
list_data <- list(c("Shubham","Arpita","Nishka"), matrix(c(40,80,60,70,90,80), nrow = 2),
   list("BCA","MCA","B.tech"))
# Accessing the first element of the list.
print(list_data[1])

# Accessing the third element. The third element is also a list, so all its elements will be printed.
print(list_data[3])

输出:

[[1]]
[1] "Shubham" "Arpita"  "Nishka"

[[1]]
[[1]][[1]]
[1] "BCA"

[[1]][[2]]
[1] "MCA"

[[1]][[3]]
[1] "B.tech"

示例2:使用名称访问元素

# Creating a list containing a vector, a matrix and a list.
list_data <- list(c("Shubham","Arpita","Nishka"), matrix(c(40,80,60,70,90,80), nrow = 2),list("BCA","MCA","B.tech"))
# Giving names to the elements in the list.
names(list_data) <- c("Student", "Marks", "Course")
# Accessing the first element of the list.
print(list_data["Student"])
print(list_data$Marks)
print(list_data)

输出:

$Student
[1] "Shubham" "Arpita"  "Nishka"

        [,1] [,2] [,3]
[1,]   40   60   90
[2,]   80   70   80

$Student
[1] "Shubham" "Arpita"  "Nishka"

$Marks
     [,1] [,2] [,3]
[1,]   40   60   90
[2,]   80   70   80

$Course
$Course[[1]]
[1] "BCA"
$Course[[2]]
[1] "MCA"
$Course[[3]]
[1] "B. tech."

操作列表元素

R允许我们添加,删除或更新列表中的元素。我们可以从任何地方更新列表的元素,但是元素只能在列表的末尾添加或删除。要从指定的索引中删除元素,我们将为其分配一个空值。我们可以通过从新值中覆盖列表元素来更新它。让我们看一个示例,以了解如何添加,删除或更新列表中的元素。

# Creating a list containing a vector, a matrix and a list.
list_data <- list(c("Shubham","Arpita","Nishka"), matrix(c(40,80,60,70,90,80), nrow = 2),
   list("BCA","MCA","B.tech"))

# Giving names to the elements in the list.
names(list_data) <- c("Student", "Marks", "Course")

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

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

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

# Updating the 3rd Element.
list_data[3] <- "Masters of computer applications"
print(list_data[3])

输出:

[[1]]
[1] "Moradabad"

$
NULL

$Course
[1] "Masters of computer applications"

将列表转换为矢量

列表有一个缺点,即我们无法对列表元素执行所有算术运算。为了消除这一点,缺点R提供了unlist()函数。此函数将列表转换为向量。在某些情况下,需要将列表转换为向量,以便我们可以使用向量的元素进行进一步操作。

unlist()函数将列表作为参数并更改为向量。让我们看一个示例,以了解如何在R中使用unlist()函数。

# Creating lists.
list1 <- list(10:20)
print(list1)

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

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

print(v1)
print(v2)

adding the vectors
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允许我们将一个或多个列表合并为一个列表。合并也是借助list()函数的。要合并列表,我们必须将所有列表作为参数传递给list函数,然后它返回一个列表,其中包含列表中存在的所有元素。让我们看一个例子,以了解合并过程是如何完成的。

# Creating two lists.
Even_list <- list(2,4,6,8,10)
Odd_list <- list(1,3,5,7,9)

# Merging the two lists.
merged.list <- list(Even_list,Odd_list)

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

输出:

[[1]]
[[1]][[1]]
[1] 2

[[1]][[2]]
[1] 4

[[1]][[3]]
[1] 6

[[1]][[4]]
[1] 8

[[1]][[5]]
[1] 10


[[2]]
[[2]][[1]]
[1] 1

[[2]][[2]]
[1] 3

[[2]][[3]]
[1] 5

[[2]][[4]]
[1] 7

[[2]][[5]]
[1] 9