R编程中的列表
R中的列表可以将不同种类的变量组合到一个复合结构中。
因此,列表在处理数据方面非常有用。
一个列表可以包含数字,整数字符串,因子甚至其他列表作为其组成部分。
在R中创建列表
可以认为R中的列表类似于R中的向量。
但是,向量或者多或者少是原子的,因为它们的组成无法进一步细分。
列表通常称为递归向量,因为它们由复杂的结构组成,例如向量和可能具有更多成分的其他列表。
让我们首先创建一个列表。
alist <-list(name="Ram",age=25,salary=20000)
列表的每个组成部分都可以通过其名称(以美元符号开头)进行访问。
> alist$name [1] "Ram" > alist$age [1] 25 > alist$salary [1] 20000
R中的索引列表
但是,不一定总是需要命名列表的组成部分。
我们还可以使用基本索引来引用元素。
让我们创建没有组件名称的相同列表。
> alist <-list("Ram",25,20000)
现在,我们可以访问列表中的每个元素。
请注意,与第一个元素通常为0的其他编程语言相比,索引是如何从1开始的。
> alist[[1]] [1] "Ram" > alist[[2]] [1] 25 > alist[[3]] [1] 20000
也允许使用方括号内的组件名称进行索引。
> alist <-list(name="Ram",age=25,salary=20000) > alist[['name']] [1] "Ram"
让我们看一下更复杂的列表以及如何对其进行索引。
考虑我们正在构建一个游戏,角色在每个位置都有选择权。
有关游戏玩法的所有信息都封装在一个列表中,如下所示。
> mylist <-list(choices=c("Right","Left","Jump","Duck"),pos=matrix(c(22.4,32.5,20,28),ncol=2,nrow=2),charname="Mario")
此处的列表包含可用选项的向量,字符在屏幕上的位置的矩阵以及字符名称(字符串)。
让我们看看如何索引这些。
#Access the elements of the vector within the list > mylist$choices[2] [1] "Left" #Get the matrix from the list > mylist$pos [,1] [,2] [1,] 22.4 20 [2,] 32.5 28 #Access elements of matrix using the indexes > mylist$pos[1,2] [1] 20
分配名称
创建列表后,还可以按以下方式重新分配列表组件的名称。
无论您是否已分配名称,此方法都有效。
> names(mylist)=c("Actions","Positions","Name") > mylist $Actions [1] "Right" "Left" "Jump" "Duck" $Positions [,1] [,2] [1,] 22.4 20 [2,] 32.5 28 $Name [1] "Mario"
修改列表
您始终可以使用美元符号将新组件添加到列表中,如下所示。
我们将演示添加一个名为" lives"的新组件,该组件的整数值为3。
> mylist$lives <-3 > mylist $Actions [1] "Right" "Left" "Jump" "Duck" $Positions [,1] [,2] [1,] 22.4 20 [2,] 32.5 28 $Name [1] "Mario" $lives [1] 3
嵌套列表
可以将一个列表作为组件添加到另一个列表中。
可以在任何深度级别上完成。
在这种情况下,索引遵循嵌套模式。
让我们来看一个例子。
#Create a list to represent the player > player <- list(name="Adam",age=16,location= "USA") #Add this as a component to the list we created earlier. > mylist$player <- player #Display the list. > mylist $Actions [1] "Right" "Left" "Jump" "Duck" $Positions [,1] [,2] [1,] 22.4 20 [2,] 32.5 28 $Name [1] "Mario" $lives [1] 3 $player $player$name [1] "Adam" $player$age [1] 16 $player$location [1] "USA"
当我们需要在" mylist"中引用播放器的位置时,可以使用" mylist $player $location"来实现。
> mylist$player$location [1] "USA"
当尝试以上述方式访问列表元素时,请记住嵌套顺序,这一点很重要。
通常使用列表来返回函数输出。
但是,由于它们的可变性,与向量和矩阵相比,它们会消耗大量内存。
因此,在编程时必须小心处理列表。