list创建及子集提取:
list中的元素可以由向量、矩阵等组成
提取list中的元素可以用[],[[]],$来提取
> foo = list(x = 1:6, y = matrix(1:4, nrow = 2),z=LETTERS[1:5])
> foo
$x
[1] 1 2 3 4 5 6
$y
[,1] [,2]
[1,] 1 3
[2,] 2 4
$z
[1] "A" "B" "C" "D" "E"
> foo[1]
$x
[1] 1 2 3 4 5 6
> foo[[1]]
[1] 1 2 3 4 5 6
> foo$x
[1] 1 2 3 4 5 6
> foo[1][-4]
$x
[1] 1 2 3 4 5 6
> foo[[2]][1,2]
[1] 3
> foo$y[1:3]
[1] 1 2 3
as.list()与unlist()函数
as.list():可以将向量或者矩阵转换成list,转换的方式为将向量/矩阵中的每个元素都作为list中的一个元素
unlist():返回值为一个向量。将list中的每个元素如向量/矩阵中的每个元素拆解成向量中的一个元素。
> as.list(foo$y)
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
[[4]]
[1] 4
> unlist(foo)
x1 x2 x3 x4 x5 x6 y1 y2 y3 y4 z1 z2 z3 z4 z5
"1" "2" "3" "4" "5" "6" "1" "2" "3" "4" "A" "B" "C" "D" "E"
几个函数的学习巩固
(1)as numeric():as.numeric中不能填入list对象,会报错误错误: 'list' object cannot be coerced to type 'double'。解决这个问题需要深刻理解面向对象的编程思想。
(2)strsplit():具体见上一章节,注意若给定的x为字符串,则拆分字符串;若给定的x为向量,则拆分向量中的每个字符串
(3)sapply()#意为Apply a Function over a List or Vector:对列表和向量中的每个元素都应用相应的函数
(4)t():转置矩阵或者数据框
> x <- c('10, 8, 7', '5, 2, 2', '3, 7, 8', '8, 8, 9')
> unlist(strsplit(x[1],","))
[1] "10" " 8" " 7"
> as.numeric(unlist(strsplit(x[1],",")))
#as.numeric中不能填入list对象
[1] 10 8 7
> result <- strsplit(x, ',')#若给定的x为字符串,则拆分字符串;若给定的x为向量,则拆分向量中的每个字符串
> result
[[1]]
[1] "10" " 8" " 7"
[[2]]
[1] "5" " 2" " 2"
[[3]]
[1] "3" " 7" " 8"
[[4]]
[1] "8" " 8" " 9"
> sapply(result, as.numeric)#result为传入一个列表,as.numeric为函数.意为Apply a Function over a List or Vector
[,1] [,2] [,3] [,4]
[1,] 10 5 3 8
[2,] 8 2 7 8
[3,] 7 2 8 9
> t(sapply(result, as.numeric))#t转置一下
[,1] [,2] [,3]
[1,] 10 8 7
[2,] 5 2 2
[3,] 3 7 8
[4,] 8 8 9