列表 List

列表是数据框和面向对象编程的基础。 列表可以组合多个不同类型的对象。

创建列表

使用list()函数创建列表

list(value,value,...)

list(tag = value, tag = value, ...)

tag:组件名称,标签

使用vector()创建列表

z <- vector(mode = 'list')
z[['abc']] <- 3

列表是向量,是“递归型”向量(recursive),普通向量为“原子型”向量(atomic)

使用as.list(x)将对象强制转化为列表

列表的操作

列表索引

索引类型

  • 使用标签名

    • listName$tagName该方法可以使用标签名的简写,使用的时候标签名可以简写,只写出前几个字母,只要不引起歧义。
    • listName[['tagName']]注意双重中括号,且标签名用引号包围,不可使用标签名的简写
  • 使用数字索引

    • listName[[tagNumber]],注意双重中括号,且标签数字不用引号

返回值

该组件,且与该组件在list中类型相同

使用单重中括号与双重中括号的区别:

  • 使用单中括号
  • 可以使用组件名和数字索引提取列表元素;
  • 可以同时提取多个组件,只需将参数写为向量类型,返回值是一个新的列表,它是原列表的子列表,可以提取多个组件:
    listName[c('tagName1', 'tagName2', ...]
    listName[c(1, 2, 3,...)]
    
  • 使用双重中括号
  • 一次只能提取列表的一个组件;
  • 返回值是组件本身的类型,不是列表,例如组件是一个数据框,则返回数据框。

增加列元素

  • 使用组件名增加新的组件:
    listName$newTag <- value
    
  • 使用数字索引增加组件:
    listName[[newNumber]] <- value
    listName[c(...)] <- c(...)
    

删除列元素

将列元素的值设为NULL,之后的元素索引全部减1。

拼接列表

c(list1, list2, ...)

获取列表的长度

length(listName):返回值为列表的组件个数;

访问列表元素和值

  • 使用names(listName)获取列表的标签名称,如果有的话;
  • 使用unlist(listName)获取列表的值,去列表化:

    • 返回值是一个向量,向量的元素名是原列表的标签名,所有元素类型相同;
    • 若列表元素为混合类型,则遵循以下原则:
      • 在混合类型的情形下,R选择这些类型中能最大程度地保留它们共同特性的类型,通常是字符串向量;
      • R的各种类型之间有优先级结构,排序为:NULL < raw < 逻辑类型 < 整型 < 实数类型 < 复数类型 < 列表 < 表达式;
  • 将返回向量的元素名去掉:

    • names(vectorName) <- NULL
    • unname(vectorName)直接去掉元素名

在列表上使用apply系列函数

  • lapply(X, FUN, ...)函数
    • list apply:对列表(或强制转换成列表的向量)的每个组件执行给定的函数,并返回另一个列表
  • sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)函数
    • simplified lappy:返回值可以转化为向量或矩阵形式

递归型列表

  • 递归性(recursive):列表的组件也可以是列表

  • 取消递归性:

    • 拼接列表:c()有个可选参数recursive,决定在拼接列表的时候,是否把原列表“压平”,即把所有的组件的元素都提取出来,组成一个向量

results matching ""

    No results matching ""