R语言--17

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

你可能感兴趣的:(R语言--17)