服务热线
178 0020 3020
列表也可以理解为数组,但是比较特殊,列表中每个元素都可以是不同类型,如下面:
全选中代码,然后点击上图中红框部分“run”,在控制台会出现如下的结果:
可以看出,列表list()里面可以放置不同类型的元素,上面的代码中放置了字符串、向量、布尔、浮点。当然,list()里面还可以包含list().
当然我们要怎么访问list()里面的每个元素呢?我们首先要给list()里面的所有元素都命名一下,名称为字符类型,如下面代码;
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2), list("green",12.3)) names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list") print(list_data)
全选中之后运行,会得到如下结果:
$`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
那么我们怎么访问呢?有两种方式,第一种是直接通过数字下标访问,我们之前介绍到很多语言的数字下标是从0开始的,R语言的下标是从1开始的,因此上述list()中要访问第一个元素可以使用如下的语句:
print(list_data[1])
如果重命名之后,可以如下方式访问(依然使用上面的list):
print(list_data$A_Matrix) #上述代码等同于 print(list_data[2]),因为A_Matrix是list的第二个元素
可以看出重命名list是为了更好地辨别,使用list_data$A_Matrix就能清楚知道当前的是一个Matrix,而使用list_data[2]你不可能从字面上看出来是什么东西。
我们学习了列表的访问,那么接下来看一下列表的更新、增加、删除,看如下代码:
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2), list("green",12.3)) names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list") list_data[4] <- "New element" print(list_data[4]) list_data[4] <- NULL print(list_data[4]) list_data[3] <- "updated element" print(list_data[3])
上述代码中,首先我们定义了一个3个元素的列表list_data,然后给列表中的每个元素用names()命名,之后我们重新增加一个列表元素list_data[4]; 接下来我们将list_data[4]删除(赋值为NULL),最后我们将第三个元素更新为字符串“update element”(原来第三个元素是list("green",12,3)
列表的合并
有时候我们需要合并两个列表,可以使用如下的方式
list1 <- list(1,2,3) list2 <- list("Sun","Mon","Tue") merged.list <- c(list1,list2) print(merged.list)
列表可以转换为向量,使得向量的元素可以用于进一步的操作。 可以在将列表转换为向量之后应用对向量的所有算术运算。 要做这个转换,我们使用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
附件