R语言4——R的数据类型2

目录

R语言4——R的数据类型2

1、字符串

1.1 在字符串的语法中,单引号和双引号不能混用

1.2  字符串连接函数——paste()函数

1.3  字符串格式化函数——format()函数

1.4字符串计算长度函数——nchar()函数

1.5大小写转换函数——toupper()& tolower()函数

1.6截取字符串函数——substring()函数

2、列表

3.矩阵

1、创建矩阵函数——matrix()函数

2、转置矩阵函数——t()函数

3、访问矩阵元素

4、矩阵计算

4.数组

1、数组的创建——array()函数

2、访问数组元素

3、数组跨纬度的元素计算


1、字符串

1.1 在字符串的语法中,单引号和双引号不能混用

在字符串构造中应用的规则

  1. 在字符串的开头和结尾的引号应该是两个双引号或两个单引号。它们不能被混合。
  2. 双引号可以插入到以单引号开头和结尾的字符串中。
  3. 单引号可以插入以双引号开头和结尾的字符串。
  4. 双引号不能插入以双引号开头和结尾的字符串。
  5. 单引号不能插入以单引号开头和结尾的字符串。

1.2  字符串连接函数——paste()函数

函数的实例如下代码,paste()函数语法规则如下:

paste(..., sep = " ", collapse = NULL)

其中...,表示需要进行连接的字符串;

sep表示前面...的参数之间进行连接的连接符,默认是空格,可以自行设置。

collapse是在字符串之间进行操作,当前面传入的字符串参数a,b,c...字符串为单个字符串时,collapse参数的意义在于消除a,b,c...字符串之间的空格,但不包括字符串内部的空格。当前面传入的字符串参数是一个列表时,collapse可以使用我们设置的连接符(collapse的参数)为字符串进行连接并消除字符串之间的空格,不包括字符串内的空格。

> a <- "apple"
> b <- 'orange'
> c <- "water"
> paste(a,b,c)
[1] "apple orange water"
> paste(a,b,c, sep = "&")
[1] "apple&orange&water"
> paste(c(a,b,c), 1:3, ".pdf", sep = "")
[1] "apple1.pdf"  "orange2.pdf" "water3.pdf" 
> paste(c(a,b,c), sep = "",collapse = "&")
[1] "apple&orange&water"
> paste(c(a,b,c), 1:3, ".pdf", sep = "", collapse = "&")
[1] "apple1.pdf&orange2.pdf&water3.pdf"

#关于collapse与sep的区别
> paste(a,b,c, sep = "", collapse = "+")
[1] "appleorangewater"
> paste(c(a,b,c), sep = "", collapse = "+")
[1] "apple+orange+water"

如上所示,paste(a,b,c) 表示将a,b,c三个字符串连接成一个字符串,默认分隔符为空格。

paste(a,b,c, sep = "&") 表示使用"&"连接符连接三个字符串。

paste(c(a,b,c), 1:3, ".pdf", sep = "") 表示连接多个参数,可以批量输出文本/文件名

paste(a,b,c, sep = "", collapse = "+") 表示消除a,b,c三个字符串之间的空格连接成一个字符串

paste(c(a,b,c), sep = "", collapse = "+") 表示将元素进行折叠,并使用参数连接符进行连接。

1.3  字符串格式化函数——format()函数

format() 函数用于格式化字符串,format() 可作用于字符串或数字。

语法格式:format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none"))

其中,x表示输入的向量;

digits表示需要显示的小数点位数;

nsmall表示小数点右边显示的最小位数;

science表示是否设置为科学计数法,参数为true/false

width表示通过在开头填充空白来显示最小宽度;

justify表示设置显示的位置,左边,右边,中间,其他。此时X参数的参数需要为字符串

> r <- format(12.345322223, digits = 5)
> r
[1] "12.345"
#digits=5表示可以保留五位数字,不包括小数点

> r <- format(12.345322223, nsmall = 5)
> r
[1] "12.34532"
> r <- format(12.345322223, nsmall = 2)
> r
[1] "12.34532"
#nsmall函数表示小数点右边最少的位数


> r <- format(1122.345322223, scientific = TRUE)
> r
[1] "1.122345e+03"
#scientific参数不需要带引号,true需要大写

> r <- format(11.23, width = 10)
> r
[1] "     11.23"
>


> r <- format("12.12", width = 10, justify = "c")
> r 
[1] "  12.12   "
>

1.4字符串计算长度函数——nchar()函数

nchar() 函数用于计数字符串或数字列表的长度。   语法格式:nchar(x)  ,  其中,x 为向量或字符串

> r <- nchar("hello world!")
> r
[1] 12
>

1.5大小写转换函数——toupper()& tolower()函数

toupper() & tolower() 函数用于将字符串的字母转化为大写或者小写。

语法格式:toupper(x)    tolower(x)     其中,x 为向量或字符串。

> r <- nchar("hello world!")
> r
[1] 12
> a <- toupper("hello world!")
> a
[1] "HELLO WORLD!"
> b <- tolower(a)
> b
[1] "hello world!"
>

1.6截取字符串函数——substring()函数

substring() 函数用于截取字符串。 语法格式:substring(x,first,last)

x : 向量或字符串

first : 开始截取的位置

last: 结束截取的位置,截取结果不包含

> str1 <- "hello world!hello world!"
> str <- substring(str1, 2 ,6)
> str
[1] "ello "

#注意在R中字符串的计数是从1开始计算的,所以2表示的是字母e

2、列表

创建列表使用 list() 函数。列表中的元素可以是数字、向量、字符串、列表本身、矩阵、函数。

> list_data <- list("white", "gogo", c(11,22,33), 123, 12.12, 119.1)
> list_data
[[1]]
[1] "white"

[[2]]
[1] "gogo"

[[3]]
[1] 11 22 33

[[4]]
[1] 123

[[5]]
[1] 12.12

[[6]]
[1] 119.1

使用names()函数给列表的元素命名:

# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("runoob",12.3))

# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")

# 显示列表
print(list_data)


#输出结果如下:
$Sites
[1] "Google" "Runoob" "Taobao"

$Numbers
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

$Lists
$Lists[[1]]
[1] "runoob"

$Lists[[2]]
[1] 12.3

访问列表:

列表中的元素可以使用索引来访问,如果使用来 names() 函数命名后,我们还可以使用对应名字来访问:

# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("runoob",12.3))

# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")

# 显示列表
print(list_data[1])

# 访问列表的第三个元素
print(list_data[3])

# 访问第一个向量元素
print(list_data$Numbers)

输出结果如下:

$Sites
[1] "Google" "Runoob" "Taobao"

$Lists
$Lists[[1]]
[1] "runoob"

$Lists[[2]]
[1] 12.3


     [,1] [,2] [,3]
[1,]    1    3    5

合并列表:

# 创建两个列表
list1 <- list(1,2,3)
list2 <- list("Google","Runoob","Taobao")

# 合并列表
merged.list <- c(list1,list2)

# 显示合并后的列表
print(merged.list)

将列表转换为向量

> list1 <- list(1:5)
> print(list1)
[[1]]
[1] 1 2 3 4 5

> list1 <- list(1:5)
> print(list1)
[[1]]
[1] 1 2 3 4 5

> 
> list2 <-list(10:14)
> print(list2)
[[1]]
[1] 10 11 12 13 14

> # 转换为向量
> v1 <- unlist(list1)
> v2 <- unlist(list2)
> v1
[1] 1 2 3 4 5
> v2
[1] 10 11 12 13 14
> result <- v1+v2
> print(result)
[1] 11 13 15 17 19

3.矩阵

1、创建矩阵函数——matrix()函数

我们看过的这部经典电影黑客帝国的英文名称就是matrix,电影里世界就是由矩阵组成的。

ar函数 参数 r语言 array函数r语言_ar函数 参数 r语言

在R中使用 matrix() 函数来创建矩阵 matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)

其中data表示矩阵中的数字;

nrow表示行数;ncol表示列数;

byrow表示逻辑值,byrow值为 FALSE 按列排列,为 TRUE 按行排列;

dimname 设置行和列的名称

> m <- matrix(c(1:10), nrow = 2, byrow = TRUE)
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
> 

#为矩阵设置行列名称
> rownames = c("r1", "r2", "r3", "r4")
> colnames = c("c1", "c2", "c3", "c4", "c5", "c6", "c7")
> 
> m2 <- matrix(c(10:37), nrow =4 ,byrow = TRUE, dimnames = list(rownames, colnames))
> m2
   c1 c2 c3 c4 c5 c6 c7
r1 10 11 12 13 14 15 16
r2 17 18 19 20 21 22 23
r3 24 25 26 27 28 29 30
r4 31 32 33 34 35 36 37
>

2、转置矩阵函数——t()函数

ar函数 参数 r语言 array函数r语言_ar函数 参数 r语言_02

> M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
> print(M)
     [,1] [,2] [,3]
[1,]    2    6    5
[2,]    1   10    4
> print(t(M))
     [,1] [,2]
[1,]    2    1
[2,]    6   10
[3,]    5    4

3、访问矩阵元素

如果想获取矩阵元素,可以通过使用元素的列索引和行索引,类似坐标形式。

> M[1,2]
[1] 6
> M[,2]  #访问第二列
[1]  6 10
> M[1,]   #访问第一行
[1] 2 6 5
>

4、矩阵计算

大小相同(行数列数都相同)的矩阵之间可以相互加减,具体是对每个位置上的元素做加减法。矩阵的乘法则较为复杂。两个矩阵可以相乘,当且仅当第一个矩阵的列数等于第二个矩阵的行数

> # 创建 2 行 3 列的矩阵
> matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
> print(matrix1)
     [,1] [,2] [,3]
[1,]    7   -1    2
[2,]    9    4    3
> 
> matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
> print(matrix2)
     [,1] [,2] [,3]
[1,]    6    0    3
[2,]    1    9    2
> 
> # 两个矩阵相加
> result <- matrix1 + matrix2
> cat("相加结果:","\n")
相加结果: 
> print(result)
     [,1] [,2] [,3]
[1,]   13   -1    5
[2,]   10   13    5
> 
> # 两个矩阵相减
> result <- matrix1 - matrix2
> cat("相减结果:","\n")
相减结果: 
> print(result)
     [,1] [,2] [,3]
[1,]    1   -1   -1
[2,]    8   -5    1
>
> # 创建 2 行 3 列的矩阵
> matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
> print(matrix1)
     [,1] [,2] [,3]
[1,]    7   -1    2
[2,]    9    4    3
> 
> matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
> print(matrix2)
     [,1] [,2] [,3]
[1,]    6    0    3
[2,]    1    9    2
> 
> # 两个矩阵相乘
> result <- matrix1 * matrix2
> cat("相加结果:","\n")
相加结果: 
> print(result)
     [,1] [,2] [,3]
[1,]   42    0    6
[2,]    9   36    6
> 
> # 两个矩阵相除
> result <- matrix1 / matrix2
> cat("相减结果:","\n")
相减结果: 
> print(result)
         [,1]      [,2]      [,3]
[1,] 1.166667      -Inf      0.6666667
[2,] 9.000000   0.4444444    1.5000000

4.数组

数组也是 R 语言的对象,R 语言可以创建一维或多维数组。R 语言数组是一个同一类型的集合,前面的矩阵 matrix 其实就是一个二维数组。向量、矩阵、数组关系可以看下图:

ar函数 参数 r语言 array函数r语言_ar函数 参数 r语言_03

1、数组的创建——array()函数

R 语言数组创建使用 array() 函数,该函数使用向量作为输入参数,可以使用 dim 设置数组维度。array() 函数语法格式如下:array(data = NA, dim = length(data), dimnames = NULL)

其中:data 向量,数组元素。

dim 数组的维度,默认是一维数组。

dimnames 维度的名称,必须是个列表,默认情况下是不设置名称的。

> v1 <- c(1,2,3)
> v2 <- c(2,3,4,5,6,7)
> v1
[1] 1 2 3
> v2
[1] 2 3 4 5 6 7
> 
> v3 <- array(c(v1,v2), dim = c(3,3,2))
> v3
, , 1

     [,1] [,2] [,3]
[1,]    1    2    5
[2,]    2    3    6
[3,]    3    4    7

, , 2

     [,1] [,2] [,3]
[1,]    1    2    5
[2,]    2    3    6
[3,]    3    4    7

>

dimnames参数为数组命名:

> column.names <- c("COL1","COL2","COL3")
> row.names <- c("ROW1","ROW2","ROW3")
> matrix.names <- c("Matrix1","Matrix2")
> v4 <- array(c(v1,v2), dim = c(3,3,2), dimnames = list(row.names,column.names,matrix.names) )
> v4
, , Matrix1

     COL1 COL2 COL3
ROW1    1    2    5
ROW2    2    3    6
ROW3    3    4    7

, , Matrix2

     COL1 COL2 COL3
ROW1    1    2    5
ROW2    2    3    6
ROW3    3    4    7

2、访问数组元素

> v3
, , 1

     [,1] [,2] [,3]
[1,]    1    2    5
[2,]    2    3    6
[3,]    3    4    7

> #显示第一个矩阵第一行
> print(v3[1,,1])
[1] 1 2 5
> #显示第一个矩阵第一行第三列的数字
> print(v3[1,3,1])
[1] 5
> #输出第二个矩阵
> print(v3[,,1])
     [,1] [,2] [,3]
[1,]    1    2    5
[2,]    2    3    6
[3,]    3    4    7

3、数组跨纬度的元素计算

使用 apply() 元素对数组元素进行跨维度计算,语法格式如下:apply(x, margin, fun)

x 数组

margin 数据名称

fun 计算函数

以下我们使用 apply() 函数来计算数组两个矩阵中每一行对数字之和。

> # 创建两个不同长度的向量
> vector1 <- c(5,9,3)
> vector2 <- c(10,11,12,13,14,15)
> 
> # 创建数组
> new.array <- array(c(vector1,vector2),dim = c(3,3,2))
> print(new.array)
, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

> 
> # 计算数组中所有矩阵第一的数字之和
> result <- apply(new.array, c(1), sum)
> print(result)
[1] 56 68 60