R语言基础
R语言第二章–延续
延续补充:
-
矩阵的数乘
a<-matrix(1:20,4,5) b<-2 c<-a*b;c # [,1] [,2] [,3] [,4] [,5] #[1,] 2 10 18 26 34 #[2,] 4 12 20 28 36 #[3,] 6 14 22 30 38 #[4,] 8 16 24 32 40
-
矩阵的加减法
a<-matrix(1:8,2,4) b<-matrix(2:10,2,4) a-b # [,1] [,2] [,3] [,4] #[1,] -1 -1 -1 -1 #[2,] -1 -1 -1 -1
-
矩阵的乘法
矩阵的乘法操作%*%
a=rbind(c(2,3,4),c(4,6,10));dim(a)#dim()函数检查矩阵维度 #[1] 2 3 2行3列 b=cbind(c(3,7,4),c(5,10,8));dim(b) #[1] 3 2 3行2列 a%*%b # [,1] [,2] #[1,] 43 72 #[2,] 94 160
-
单位矩阵diag()
a=diag(3);a # [,1] [,2] [,3] #[1,] 1 0 0 #[2,] 0 1 0 #[3,] 0 0 1
-
逆矩阵solve()
a<-matrix(c(3,4,1,2),2,2)
solve(a)
# [,1] [,2]
#[1,] 1 -0.5
#[2,] -2 1.5
2.3 非数值型数据
2.3.1逻辑值
1.逻辑值的输出:关系运算符
运算符 | 解释 |
---|---|
== | 相等 |
!= | 不相等 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
a<-c(2,3,4,5,111,13,6,4877,256)
b<-c(2,3,4,4,57,36,36,364,35)
a==b
#[1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
a>b
#[1] FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE
a>=b
#[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
#两个矩阵也可以进行比较。
注:这些关系符号常用于数值比较
1==2
#[1] FALSE
1!=2
#[1] TRUE
any()与all()用来快速查看逻辑值
如果向量中至少有一个TRUE,any()函数就会返回TRUE,否则返回FALSE。
如果向量中所有逻辑值为TRUE,all()函数就会返回TRUE,否则FALSE。
a<-c(2,3,4,5,111,13,6,4877,256)
b<-c(2,3,4,4,57,36,36,364,35)
c<-a==b
d<-a>=b
any(c)
#[1] TRUE
all(d)
#[1] FALSE
2.逻辑运算符
运算符 | 描述 |
---|---|
& | AND(元素比较) |
| | OR(元素比较) |
! | 否/非 |
&& | 同上(单值比较) |
|| | 同上(单值比较) |
&&,||由于比较两个独立值,并返回单个逻辑值。这在if条件语句中较为重要
x1<-c(T,F,F,F,T,T,F)
x2<-c(F,T,F,F,T,F,T)
x1&x2
#[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE
x1|x2
#[1] TRUE TRUE FALSE FALSE TRUE TRUE TRUE
x1&&x2
#FALSE
x1||x2
#TRUE
#&&、||,只比较两个向量中的第一对元素。
3.逻辑值也是数值
逻辑值基于二进制,TRUE为1 FALSE为0.
x<-TRUE+TRUE;x
#[1] 2
x1<FALSE-1;x1
#[1] -1
4.逻辑值提取子集
y<-c(-4,5,73,3.6,-1,10)
y1<-y<0;y1
#[1] TRUE FALSE FALSE FALSE TRUE FALSE
##目的将负数值提取出来
y2<-y[y<0];y2
#[1] -4 -1
2.3.2字符
x<-'fhsfwsjfwjsfjf';length(x)
#[1] 1
#在R语言中x作为实体长度为1的向量,R语言是计算不同字符串的总数,而不是单独字符或单词。
#如果计算单个字符数量使用nchar()
x1<-nchar(x);x1
#[1] 14
-
字符串连接
使用cat(),paste()连接字符串
cat()将内容直接输出到控制台不会返回如何内容。
paste()将返回以字符串为可用对象,当字符串连接结果需要传递到另一个函数或者其他方式使用,可用其方法。
x<-c('my','name','is','jack');x #[1] "my" "name" "is" "jack" x1<-cat('my','name','is','tom') #my name is tom x2<-paste('my','name','is','tom');x2 #[1] "my name is tom" #cat与paste返回值时paste有[1],表明返回包含一个字符串向量。 ##这两个有个可选参数sep,它是连接字符的字符串。 x3<-paste('my','name','is','tom',sep='---');x3 #[1] "my---name---is---tom" x4<-cat('my','name','is','tom',sep=' ') #my name is tom
-
转义字符
转义字符 结果 \n 换行 \t 水平制表 \b 调用退格 \\ 反斜杠 \‘’ 双引号
a<-cat('this is a string\nsplit\tto new\b\n\n\ttitles\"\\yes')
#this is a string
#split to new
# titles"\yes
-
替换与查找
通过substr()通过参数参数start,stop,从字符串x中提取两个字符之间(包括)位置的字符串。
x<-'this is a beautiful girl' substr(x,start=1,stop=4) #[1] "this" ##将this替换为that substr(x,start=1,stop=4)<-'that';x #[1] "that is a beautiful girl"
通过sub()或者gsub()替换更加方便。sub函数可以在字符串x中收索出较短字符串模式(pattern)然后使用replacement参数的新字符就行替代。gsub函数相同,但他会替换含有pattern的每一个字符串
q<-'how much wood could a woodchuck chuck' sub(pattern='chuck',replacement='hurl',x=q) #[1] "how much wood could a woodhurl chuck" gsub(pattern='chuck',replacement='hurl',x=q) #[1] "how much wood could a woodhurl hurl"
2.3.3因子
因子由于表示不同类别的有限数据,而不是表示连续数据,像分类数据形式在数据科学中发挥着重要作用。
如性别:男 女
sex_char<-c('male','female','male','female')
#将性别编码,男1,女0
sex_num<-c(1,0,1,0)
#因子只能是向量,使用factor()可以创建一个因子向量
sex_num_fac<-factor(x=sex_num);sex_num_fac
#[1] 1 0 1 0
#Levels: 0 1
sex_char_fac<-factor(x=sex);sex_char_fac
#[1] male female male female
#Levels: female male
##我们获得了两个存储性别的因子向量。
#使用levels函数可以提取字符串向量的水平值。
levels(sex_num_fac)
#[1] "0" "1"
levels(sex_char_fac)
#[1] "female" "male"
#可以使用levels重新标记一个因子
levels(sex_num_fac)<-c('1','2')
sex_num_fac
#[1] 2 1 2 1
#Levels: 1 2
##因子向量一样可以就行提取子集
sex_num_fac[1:2]
#[1] 2 1
#Levels: 1 2
2.4列表
列表可以存储多种类型的结构与对象,如数值型矩阵,逻辑数值,字符串,,其它列表也可等等。
创建列表函数为list()
list_1<-list(matrix(1:4,2,2),'sdh',2234,c(T,F));list_1
#[[1]]
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
#[[2]]
#[1] "sdh"
#[[3]]
#[1] 2234
#[[4]]
#[1] TRUE FALSE
length(list_1)
#[1] 4
#利用索引双括号提取数据
list_1[[3]]
#[1] 2234
#利用赋值符就行赋值
list_1[[2]]<-paste(list_[[2]],'hello');list_1[[2]]
#[1] "sdh hello"
#希望访问list_1的第1,第2个组件
list_1[[c(1,2)]]
#[1] 2 #访问的是第一个组的第2个元素
list_1[c(1,2)]
#[[1]]
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
#[[2]]
#[1] "sdh hello"
-
列表命名
使用names函数给列表元素命名,这样元素更容易被识别。
如果在创建列表时就命名那么在给每个组件分配一个标签:
a<-list(a=‘dfhs’,b=matrix(1:4,2,2))此时名字就为a,b
names(list_1)<-c('a','b','c','d');list_1 #$a # [,1] [,2] #[1,] 1 3 #[2,] 2 4 #$b #[1] "sdh hello" #$c #[1] 2234 #$d #[1] TRUE FALSE ####这样就不需要使用中括号来就行索引了直接使用$a等等来 list_1$a # [,1] [,2] #[1,] 1 3 #[2,] 2 4
-
嵌套
我们使用美元符号来给现有的列表添加组件
a2<-list(a1='dfhs',b1=matrix(1:4,2,2)) a2$c1<-list_1 #$a1 #[1] "dfhs" #$b1 # [,1] [,2] #[1,] 1 3 #[2,] 2 4 #$c1 #$c1$a # [,1] [,2] #[1,] 1 3 #[2,] 2 4 #$c1$b #[1] "sdh hello" #$c1$c #[1] 2234 #$c1$d #[1] TRUE FALSE ##我们定义了第三个名“c1”将list_1赋值给了“c1”,这样我们就可以使用它们组合进行提取“c1”里的元素 a2$c1$a[1,2] #[1] 3 #此时提取了c1中a的第一行第二列元素