R 列表是实时中最强大和最有用的数据结构之一。它允许我们存储各种类型的元素,如整数、字符串、向量、矩阵、列表(嵌套)、数据框等。因此,大多数人称列表为高级向量。在这里,我们将通过一个例子展示如何在编程语言中创建、访问元素、操作它们以及创建命名列表。
创建 R 列表
在此示例中,我们将创建一个包含不同元素的列表。最常见的创建方式。
list.data <- list("Tutorial", "Gateway", TRUE, c(10, 20, 30), 95, 105.61)
print(list.data)
在这里,我们创建了一个包含两个字符串、一个布尔值、一个向量和数字值的列表。

在此示例中,我们将使用向量在此编程中创建列表。
# Creating three vectors
vect.a <- c(10.25, 20.45, 30.75, 40.85)
vect.b <- c(25, 50, 75, 100, 125)
vect.c <- c("India", "China", "Japan", "Russia", "USA")
list.data <- list(vect.a, vect.b, vect.c )
print(list.data)

在 R 中使用矩阵和向量创建列表
在此示例中,我们将使用 矩阵 和 向量 创建列表。在这个 R 编程 示例中,我们首先创建了两个向量 vect.a 和 vect.b 并分配了一些随机值。在第 6 行,我们从上述指定的向量创建了一个列表。
接下来,我们声明了一个 3 * 4 的矩阵和一个随机值向量。在第 12 行,它创建了一个包含矩阵、向量和列表(嵌套)的列表。
vect.a <- c(10.25, 30.75, 20.45, 40.85)
vect.b <- c("India", "Japan", "Russia", "China", "USA")
list.data <- list(vect.a, vect.b )
print(list.data)
A <- matrix(c(1:12), nrow = 3)
vect.c <- c(50, 75, 25, 100, 125)
list.mixed <- list(A, list.data, vect.c )
print(list.mixed)

创建命名列表
它展示了在编程中创建命名列表的步骤,语法是:list_Name <- c(“index_Name1” = Value1, “index_Name2″ = Value2,… ,”index_NameN” = ValueN )
list.data <- list("Company" = "Tutorial Gateway", "Flag" = TRUE, "prod" = c(10, 20, 30), "val" = 95, "sale" = 105.61)
print(list.data)
正如您所见,我们正在为列表元素分配名称。这对于使用这些字符向量的索引值访问元素非常有用。例如,print(listname.data$Company)

使用 names 函数创建命名列表
names 函数对于分配名称非常有用。让我们看看如何在 R 中为已创建的列表分配名称。其语法是:names(<list name>) <- c(“name1”, “name2″…., “nameN”).
vect.x <- c(10, 30, 50, 70)
vect.y <- c("India", "Japan", "UK", "Russia", "China", "USA")
list.a <- list(vect.x, vect.y )
# Assigning Names
names(list.a) <- c("Num_Vector", "Country")
print(list.a)
matrix.A <- matrix(c(1:12), 3, 4)
vect.z <- c(55, 75, 25, 105, 125)
list.mixed <- list(matrix.A, list.a, vect.z, "Tutorial Gateway")
names(list.mixed) <- c("Num_Matrix", "Inner_List", "Rand_vector", "Company")
print(list.mixed)

访问 R 列表元素
我们可以通过此编程中的索引位置来访问列表中的元素。索引值从 1 开始,到 n 结束,其中 n 是元素的数量。
例如,如果我们声明一个存储 10 个元素(不同类型或相同类型)的列表,则索引从 1 开始,到 10 结束。要访问或修改第一个值,请使用 List_Name[1],要修改或访问第 10 个值,请使用 List_Name[10]。让我们来看一个例子以便更好地理解。
vect.a <- c(10.25, 30.75, 20.45, 40.85)
vect.b <- c("India", "Japan", "Russia", "China", "USA")
vect.c <- c(50, 75, 25, 100, 125)
A <- matrix(c(1:12), 3, 4)
list.data <- list(A, vect.a, "Tutorial Gateway", vect.b, 95, vect.c )
print(list.data)
# Accessing First Element
print(list.data[1])
# Accessing Fourth Element
print(list.data[4])

使用名称访问列表项
如果我们使用名称声明列表项或为项分配名称,则可以使用这些名称来访问元素。让我们使用索引名称访问下面的项。其语法是:<listname>$Index_Name
vect.x <- c(10, 30, 50, 70)
vect.y <- c("India", "Russia", "Japan", "UK", "China", "USA")
list.data <- list(vect.x, vect.y )
names(list.data) <- c("Numeric_Vector", "Country")
matrix.A <- matrix(c(1:12), 3, 4)
vect.z <- c(55, 75, 25, 105, 125)
list.mixed <- list(matrix.A, list.data, vect.z, "Tutorial Gateway")
names(list.mixed) <- c("Numeric_Matrix", "Nested_List", "Random_vector", "Company")
print(list.mixed)
# Accessing Vector.z Elements
print(list.mixed$Random_vector)
# Accessing Vector.z Elements
print(list.mixed$Numeric_Matrix)
# Accessing Nested Elements
print(list.mixed$Nested_List)

负索引位置用于从此编程中的列表中省略这些值。此示例使用布尔向量访问项。
vect.a <- c(10.25, 30.75, 20.45, 40.85)
vect.b <- c("India", "Japan", "Russia", "China", "USA")
vect.c <- c(50, 75, 25, 100, 125)
A <- matrix(c(1:12), 3, 4)
list.data <- list(A, vect.a, "Tutorial Gateway", vect.b, 95, vect.c )
print(list.data)
# Accessing Element using Boolean Vector
print(list.data[c(FALSE, FALSE, TRUE, FALSE, TRUE, TRUE)])
# Accessing All except 1
print(list.data[-1])
# Accessing All except 4
print(list.data[-4])
# Accessing All Element except 1 and 6th element
print(list.data[c(-1, -6)])

输出 2

操作 R 列表元素
我们可以通过以下方式操作元素:第 15 行访问名称为 Company 的元素,并将现有名称(即 Tutorial Gateway)替换为 tutorialgateway.org。
在第 18 行,我们正在访问名称为 Random_Vector 的项,并将现有向量(即 vect.z)替换为新的向量值 c(22, 44, 66, 88)。
第 21 行删除了名称为 Numeric_Matrix 的项。
vect.x <- c(10, 30, 50, 70)
vect.y <- c("India", "Russia", "Japan", "UK", "China", "USA")
list.data <- list(vect.x, vect.y )
names(list.data) <- c("Numeric_Vector", "Country")
matrix.A <- matrix(c(1:12), 3, 4)
vect.z <- c(55, 75, 25, 105, 125)
list.mixed <- list(matrix.A, list.data, 95, vect.z, "Tutorial Gateway")
names(list.mixed) <- c("Numeric_Matrix", "Nested_List", "favNum", "Random_vector", "Company")
print(list.mixed)
list.mixed$Company <- "Tutortialgateway.org"
print(list.mixed$Company)
list.mixed$Random_vector <- c(22, 44, 66, 88)
print(list.mixed$Random_vector)
list.mixed$Numeric_Matrix <- NULL
print(list.mixed)

我们可以将两个列表合并成一个大的列表。
#Declared Two vector
vect.a <- c(10.25, 30.75, 20.45, 40.85)
vect.b <- c("India", "Japan", "Russia", "China", "USA")
# Create from those two Vectors Vect.a, Vect.b
list.x <- list(vect.a, 95, vect.b )
print(list.x)
# Declared One 4 * 3 matrix
A <- matrix(c(1:12), 4, 3)
# Creating second with one String, Matrix, and a vector
list.y <- list("Tutorial Gateway", A, c(5, 10, 15) )
print(list.y)
# Combining or Merging
list.z <- c(list.x, list.y)
print(list.z)

我们可以将列表转换为向量。这种转换可以帮助我们在最低级别执行操作。
list.x <- list(1:15) list.y <- list(25:40) print(list.x) print(list.y) typeof(list.x) vect.a <- unlist(list.x) print(vect.a) vect.b <- unlist(list.y) print(vect.b)
