R语言中数据类型和数据结构是两种不同的概念,初学者经常容易搞混,因此有必要对这两个概念进行详细说明。

1. 数据类型

R语言中的数据类型包括数值型(numeric)、整型(integer)、逻辑型(logical)、字符型(character)、复数型(complex)、原生型(raw),其他几类都比较常见,只有raw在其他语言中没有,raw是指直接使用其二进制的内容。

六种数据类型具体如下:

数据类型

示例

验证代码

输出结果

数值型

6.3, 4, 99.99

v <- 23.5 ; print(class(v));

[1] "numeric"

整型

2L,0L,80L

v <- 2L ; print(class(v));

[1] "integer"

逻辑型

TRUE,FALSE

v <- TRUE ; print(class(v));

[1] "logical"

字符型

‘a’,“good”,‘23.2’,“TRUE”

v <- "TRUE" ; print(class(v));

[1] "character"

复数型

5+3i

v <- 2+5i ; print(class(v));

[1] "complex"

原生型

"Hello"存储值为:48 65 6c 6c 6f

v <- charToRaw("Hello"); print(class(v));

[1] "raw"

另外这些数据类型可以相互转换,使用as.xxx()这种的函数可以将其参数转换为对应的数据类型。

2. 数据结构

R语言中用于存储数据的对象类型称为数据结构,主要有向量、矩阵、数组、数据框和列表。


R语言 igraph 查看节点相关信息 r语言中查看数据类型_R语言 igraph 查看节点相关信息

R语言中的数据结构

按照数据的维度(1D、2D、nD)和他们是同质(由相同的数据类型组成)还是异质(可以由不同的数据类型组成),可以对R语言的数据结构进行如下分类。

 

同质

异质

1D

向量

列表

2D

矩阵

数据框

nD

数组

 

 2.1 向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。各类向量如下例所示:

a <- c(1, 2, 5, 3, 6, -2, 4)
b <- c("one", "two", "three")
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

这里, a是数值型向量, b是字符型向量,而c是逻辑型向量。 注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。标量是只含一个元素的向量。

2.2 矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix()创建矩阵。一般使用格式为:

myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value, dimnames=list(
                                 char_vector_rownames, char_vector_colnames))

其中vector包含了矩阵的元素, nrow和ncol用以指定行和列的维数, dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充( byrow=TRUE)还是按列填充( byrow=FALSE),默认情况下按列填充。

举例:

> y <- matrix(1:20, nrow=5, ncol=4)
> y
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> cells <- c(1,26,24,68)
> rnames <- c("R1", "R2")
> cnames <- c("C1", "C2")
> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE,
dimnames=list(rnames, cnames))
> mymatrix
C1 C2
R1 1 26
R2 24 68
> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE,
dimnames=list(rnames, cnames))
> mymatrix
C1 C2
R1 1 24
R2 26 68

2.3 数组

数组( array)与矩阵类似,但是维度可以大于2。数组可通过array函数创建,形式如下:
myarray <- array(vector, dimensions, dimnames)
其中vector包含了数组中的数据, dimensions是一个数值型向量,给出了各个维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。

举例:

> dim1 <- c("A1", "A2")
> dim2 <- c("B1", "B2", "B3")
> dim3 <- c("C1", "C2", "C3", "C4")
> z <- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3))
> z
, , C1
   B1 B2 B3
A1 1  3  5
A2 2  4  6
, , C2
   B1 B2 B3
A1 7  9  11
A2 8  10 12
, , C3
   B1 B2 B3
A1 13 15 17
A2 14 16 18
, , C4
   B1 B2 B3
A1 19 21 23
A2 20 22 24

2.4 数据框

由于不同的列可以包含不同模式(数值型、字符型等)的数据, 数据框的概念较矩阵来说更为一般。数据框可通过函数data.frame()创建:

mydata <- data.frame(col1, col2, col3,...)

其中的列向量col1、 col2、 col3等可为任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names指定。

举例:

> patientID <- c(1, 2, 3, 4)
> age <- c(25, 34, 28, 52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor", "Improved", "Excellent", "Poor")
> patientdata <- data.frame(patientID, age, diabetes, status)
> patientdata
  patientID age diabetes status
1   1        25   Type1   Poor
2   2        34   Type2   Improved
3   3        28   Type1   Excellent
4   4        52   Type1   Poor

每一列数据的模式必须唯一。

2.5 列表

列表( list)是R的数据类型中最为复杂的一种。一般来说, 列表就是一些对象(或成分,component)的有序集合。列表允许你整合若干(可能无关的)对象到单个对象名下。例如,某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用函数list()创建列表:

mylist <- list(object1, object2, ...)
举例:

> g <- "My First List"
> h <- c(25, 26, 18, 39)
> j <- matrix(1:10, nrow=5)
> k <- c("one", "two", "three")
> mylist <- list(title=g, ages=h, j, k)
> mylist
$title
[1] "My First List"
$ages
[1] 25 26 18 39
[[3]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
[[4]]
[1] "one" "two" "three"
> mylist[[2]]
[1] 25 26 18 39
> mylist[["ages"]]
[[1] 25 26 18 39

本例创建了一个列表,其中有四个成分:一个字符串、一个数值型向量、一个矩阵以及一个字符型向量。可以组合任意多的对象,并将它们保存为一个列表。