今日: sapply() 、apply()、 list与向量的区别
用昨天的例子,
一、sapply() 、apply()
先做 name 的分词,看一下list和unlist在用sapply()做分词的区别
>name <- strsplit(StuName," ")--列表格式
>name1 <- unlist(strsplit(StuName," "))--非列表
>firstname <- sapply(name,"[",1)
>firstname --列表格式的分词后结果
[1] "John" "Angela" "Bull" "Cheryl" "Reuven" "Joel" "Mary" "Greg" "Brad" "Tracy"
> firstname1 <- sapply(name1,"[",1)
> firstname1 --非列表
John Davis Angela Williams Bull Jones Cheryl Cushing Reuven
"John" "Davis" "Angela" "Williams" "Bull" "Jones" "Cheryl" "Cushing" "Reuven"
Ytzrhak Joel Knox Mary Rayburn Greg England Brad Tmac
"Ytzrhak" "Joel" "Knox" "Mary" "Rayburn" "Greg" "England" "Brad" "Tmac"
Tracy Mcgrady
"Tracy" "Mcgrady"
>lastname <- lapply(name,"[",2)
在R语言中,有下面三种操作符可以提取对象的子集:
“[”通常返回的对象与原对象的类型相同;它也可以返回一个对象中的多个元素
“[[”用来从列表(list)或数据框(data.frame)中提取对象;也可从列表或数据框中提取单个元素,且返回对象的类型可以不为列表和数据框。
“$”可以通过名称从列表和数据框中提取元素;如果仅从抽取元素的角度来看,和“[[”没有区别
疑问:看不懂firstname1 的展示结果,像是给”分词”后的每一个“列”都起了名字
合并,
>student <-data.frame(Stuld,firstname,lastname,Math,Science,English)
>student
Stuld firstname lastname Math Science English
1 1 John Davis 502 95 25
2 2 Angela Williams 465 67 12
3 3 Bull Jones 621 78 22
4 4 Cheryl Cushing 575 66 18
5 5 Reuven Ytzrhak 454 96 15
6 6 Joel Knox 634 89 30
7 7 Mary Rayburn 576 78 37
8 8 Greg England 421 56 12
9 9 Brad Tmac 599 68 22
10 10 Tracy Mcgrady 666 10 38
二、list
列表(list)是一种特殊的向量,list可以包含不同类型的对象,甚至包括向量对象和矩阵对象等。列表中每个对象之间用逗号隔开,每个对象索引号用双“[[]]”表示,而每个对象中的元素用单“[]”表示
> mylist<-list(c(1:3),c('A','B'))
> mylist
[[1]]
[1] 1 2 3
[[2]]
[1] "A" "B"
> mylist1<-list(a=c(1:3),b=c('A','B'))--给列表的“列”命名
> mylist1
$a
[1] 1 2 3
$b
[1] "A" "B"
> mylist[1]--访问元素1
[[1]]
[1] 1 2 3
> mylist[2]
[[1]]
[1] "A" "B"
> mylist[[1]]--访问索引1
[1] 1 2 3
> mylist[1:3]--这个就不理解了。。
[[1]]
[1] 1 2 3
[[2]]
[1] "A" "B"
[[3]]
NULL