R语言编程艺术读书笔记5----列表

本文是关于R语言编程艺术的读书笔记,主要介绍了如何创建、操作和访问列表,包括列表的创建、索引、拼接、元素访问、apply函数的应用,以及递归型列表的处理。通过案例展示了文本词汇索引、词频统计和图形展示等实际应用。
摘要由CSDN通过智能技术生成

向量(标量、向量、矩阵、数组)等的元素要求都是同类型的;而列表可以组合不同类型的对象。

1、创建列表list()

exp:j <- list(name="AAA",salary=55000,union=T) 

输出:

$name

AAA


$salary

55000


$union

TRUE

简写方式:j <- list("AAA",55000,T)

向量式创建:z <- vector(mode="list")  z[["abc"]] <-3 


2、列表常规操作

列表索引:exp:j$salary、j[["salary"]]、j[[2]]  输出55000【注意:使用两个中括号】

j[1:2]则输出列表: 

$name

"AAA"

$salary

55000

增加或删除列表元素:

exp:

z <- list(a="abc",b=12)

z$c <- "sailing" #名称赋值方式添加列表元素(组件)

z[[4]] = 28 #索引位置赋值方式添加列表元素(组件)

z[5:7] <- c(FALSE,TRUE,FALSE) #使用向量赋值添加列表组件

z$b <- NULL #删除列表元素(组件)删除之后后面的索引前移

c(z,list(5)) #列表拼接 

length(z) 获取列表长度

案例:文本词汇索引

Code:

findwords <- function(tf){

txt <- scan(tf,"") #扫描(读取)文件 生成一个字符串向量 每一个单词是一个向量元素

wl <- list() #创建一个列表 用于存储检索结果

for(i in 1:length(txt)) {

wrd <- txt[i] #当前循环处的单词

wl[[wrd]] <- c(wl[[wrd]],i) #将当前单词添加索引(循环次数)后填充至list()列表 (当第二次及以后遇到同名单词时 会追加到第一个同名list()元素上)

}

return(wl) #返回所有单词的索引列表

}

3、列表元素访问

names():获取列表元素标签(命名)

unname():去掉元素名

unlist():获取列表值 返回向量

类型优先级排序:NULL<raw<逻辑类型<整型<实数类型<复数类型<列表<表达式(配对列表pairlist当做普通列表)

4、列表上使用apply()函数

lapply():对列表的每个组件执行给定的函数 返回结果列表 exp: lapply(list(1:3,25:29),median) 表示分别对1 2 3和25 26 27 28 29求中位数 返回 list(2,27)

sapply():将列表转化为矩阵或向量 exp:sapply(list(1:3,25:29),median) 返回 matrix(c(2,27))

案例:文本词汇索引(续)

Code:

alphawl <- function(wrdlst) {

nms <- names(wrdlst) #元素名(单词)

sn <- sort(nms) #按元素名排序

return(wrdlst[sn]) 

}

freqwl <- function(wrdlst) {

freqs <- sapply(wrdlst,length) #获取每个列表组件的长度(即单词个数)

return(wrdlst[order(freqs)]) #重新按词频排序后赋值给原列表并返回

}


扩展案例:用图形展示文章中使用最频繁的10个单词

Code:

nyt <- findwords("nyt,txt") #把一篇文章按单词进行索引 返回一个列表

ssnyt <- freqwl(nyt) #按词频排序

nwords <- length(ssnyt) #总单词数

freqwl <- sapply(ssnyt[round(0.9*nwords):nwords],length) #取前面的10% 并使用length()函数获取其长度(使用次数)

barplot(freqwl) #绘图

扩展案例:鲍鱼数据(向量篇曾经使用该案例)

Code:

g <- c("M","F","F","I","M","M","F") #鲍鱼性别 M雄性 F雌性 I幼虫

lapply(c("M","F","I"),function(gender) which(g==gender)) #返回g中元素分别等于M、F、I的索引向量组成的列表

输出:

[[1]]

1 5 6

[[2]]

2 3 7

[[3]]

4

5、递归型列表(嵌套型列表)

列表是可以递归的 即列表的组件也可以是列表 个人觉得使用“嵌套型列表”更形象

exp:

b <- list(u = 5, v = 12)

c <- list(w = 13)

a <- list(b,c)

输出:

[[1]]

[[1]]$u

 5

[[1]]$v

  12

[[2]]

[[2]]$w

  13

length(a)

2

【注】:从上面的返回结果我们可以看出 列表拼接后并没有改变其内部结构 而是简单的堆积到一起 成为一个递归型列表

如果需要“扁平化”列表 则需要指定list()的recursive参数

exp: c(list(a=1,b=2,c=list(d=5,e=8))),recursive=T) #recursive为TURE时将列表扁平化 得到一个向量(列表)

输出:

a   b  c.d   c.e

1   2     5     9


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值