首先是逻辑值
FALSE或TRUE,只有这两者对象。逻辑值在所有编程语言中都会出现 ,并且有许多重要的用途。
1.判断FALSE or TRUE
可缩写为F或T(这意味着对象不可被命名为T或F)
矩阵(和其他更高维数组)也可以由逻辑值组成。
2.逻辑值的输出:关系运算符
> X<-matrix(data=x,nrow=7,ncol=10,byrow=T)
> X
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[2,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[4,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[5,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[6,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[7,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> 1==2
[1] FALSE
> 1+6==7
[1] TRUE
> 1-2==(-1)
[1] TRUE
> c1<-c(1,6,4,7,9,8,4445,14,77)
> c2<-c(4,888,7,999,45,123456789)
> length(c1)==length(c2)
[1] FALSE
> c1<c2
[1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE
Warning message:
In c1 < c2 : 长的对象长度不是短的对象长度的整倍数
> c1<(c2+100000)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Warning message:
In c1 < (c2 + 1e+05) : 长的对象长度不是短的对象长度的整倍数#可用于检查
逻辑值也可用于向量的循环。
例如,> c1<=789456
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> c3<-c(852,963)
> c1>c3
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
Warning message:
In c1 > c3 : 长的对象长度不是短的对象长度的整倍数
> c3<-c(852,963,412)
> c1>c3
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
我们可以用any和all可以快速查看逻辑值。如果向量中有至少一个逻辑值是TRUE,那any函数返回TRUE。如果有一个不是TRUE,那all函数返回FALSE。
理解diag函数的材料:
> diag(diag(10)==0)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> diag(10)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 0 0 0 0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0 0
[4,] 0 0 0 1 0 0 0 0 0 0
[5,] 0 0 0 0 1 0 0 0 0 0
[6,] 0 0 0 0 0 1 0 0 0 0
[7,] 0 0 0 0 0 0 1 0 0 0
[8,] 0 0 0 0 0 0 0 1 0 0
[9,] 0 0 0 0 0 0 0 0 1 0
[10,] 0 0 0 0 0 0 0 0 0 1
> diag(10)==0
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[2,] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[3,] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[4,] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
[5,] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[6,] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
[7,] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
[8,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
[9,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
[10,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
> any(diag(diag(10)==0))
[1] FALSE
3.多重比较:逻辑运算符
逻辑值还用于检验是否满足多个条件。
接下来,基于AND和OR语句的逻辑运算符,啦比较TRUE或FALSE对细想。
版本,“单值比较”和“元素比较”
操作符号
优先顺序
c1和c2都是R中两个向量,c1&&c2,c1||c2意味着只比较两向量的第一对元素。
练习题
> foo<-c(7,1,7,10,5,9,10,3,10,8)
> foo>5|foo=2
Error in foo > 5 | foo = 2 : 没有"|<-"这个函数
> (foo>5)|(foo=2)#注意括号
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> (foo>5)|(foo==2)
[1] TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE
> bar<-c(8,8,4,4,5,1,5,6,6,8)
> ((bar<6)|(bar==6))&&(bar!=4)
[1] FALSE
> ((bar<6)|(bar==6))&(bar!=4)
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
((foo>5)|(foo==2))&((bar<=6)&(bar!=4))#还可以这样运算?
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE
(baz>=14)&(baz!=15)
##(ii)
(baz/foo>4)|(baz/foo<=2)
与以下功能相同
> ((baz>14)|(baz==14))&(baz!=15)
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE
> baz2<-baz/foo
> (baz2>4)|(baz2<=2)
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
4.逻辑值也是数值
逻辑值和数值是可以相互替换的。
> 1&&1
[1] TRUE
> 1||0
[1] TRUE
> 0&&1
[1] FALSE
这意味着我们可以对逻辑值使用各种函数
5.利用逻辑值提取子集——不需要事先知道元素的位置
逻辑标志向量,如果逻辑标志向量的元素是TRUE,那么与之对应的元素将被提取出。
例如,
> c<-(5,-6,8,99,78,2,60,94,-10,5,-12)
错误: 意外的',' in "c<-(5,"
> c<-c(5,-6,8,99,78,2,60,94,-10,5,-12)
> c<0#此执行后产生的是一个标志向量!
[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE
> c1<-c[(c<0)]
> c1
[1] -6 -10 -12
示例,c2<-c[c(T,F)]
> c2<-c[c(T,F)]
> c2
[1] 5 8 78 60 -10 -12
c3<-c[(c>0)&(c<20)]
> c3<-c[(c>0)&(c<20)]
> c3
[1] 5 8 2 5
也可以通过逻辑标志向量重写特定元素
c4<-(c[c<0]<-200)
> c4<-(c[c<0]<-200)
> c4
[1] 200
> c
[1] 5 200 8 99 78 2 60 94 200 5 200
但不能直接使用负逻辑标志向量来删除特定的元素,只有使用数值索引向量时才可以。
which
> c<-c(5,-6,8,99,78,2,60,94,-10,5,-12)
> c5<-(c<0)
> c5
[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE
> which(x=c5)
[1] 2 9 11
可以简化:
which(c<0)
执行
> which(c<0)
> which(c<0)
[1] 2 9 11
解读:which函数将逻辑值向量作为参数x,并返回所有TRUE元素对应的位置索引值。
也可以将这种方法用于其他形式的提取。
which函数可以在逻辑标志向量的基础上删除元素。我们可以用其来删除或者改写为负数元素的索引值。
c[-which(c<0)]
> c[-which(c<0)]
[1] 5 8 99 78 2 60 94 5
A[1,2:3]功能与A[c(T,F,F),c(F,T,T)]功能相同
A[A<1]<--7,这种情况下,标志矩阵与目标矩阵的行数和列数相同,因此标志矩阵提供了所有相关的结构信息。
which函数在处理二维或多维数据时要更加小心。
which(x=A>25)
which(x=c(A[,1],A[,2],A[,3])>25)
特别是在处理高维数组时,
which(x=A>25,arr.ind=T)
二、字符
字符串是另外一种常见的数据类型,用于表示文本。
R语言,字符串经常用于制定文件夹位置或软件选项;
将一个参数传递给函数;
注释存储对象,提供文本输出,或帮助解释图形。
它们可以简单地通过构造分类变量来定义不同的组,正如我们将看到的,因子更适合分类。
字符串格式
?regex
R环境中
本书中
1.创建一个字符串
foo<-"This is a character string!"
> foo<-"This is a character string!"
> foo
[1] "This is a character string!"
R将字符串作为单一的实体。——R计算的是不同字符串的总数,而不是单独字符或单词。
nchar函数
> nchar(foo)
[1] 27
> nchar(x=foo)
[1] 27
包括数字在内的几乎任何字符串组合都可以是一个有效字符串。
在这种格式下,字符串没有数字上的含义。示例:
> x<-"23.3"
> x
[1] "23.3"
> x*2
Error in x * 2 : 二进列运算符中有非数值参数
字符串常见的一个用途是比较大小:按照字母表顺序,排在后面的数字被认为更大。大写字母被认为是大于小写字母。大多数符号可以在一个字符串中同时使用。
"\"是一个重要的特例——转义符号——当一个字符串的引号内使用反斜杠时,会开始执行一些简单的操作,比如打印或者显示字符串本身。
2.连接
cat与paste两者之间的区别和各自的作用。
> u<-c("awesome","R","is")
> length(u)
[1] 3
> u
[1] "awesome" "R" "is"
> cat(u[2],u[3],"totally",u[1],"!")
R is totally awesome !>
> paste(u[2],u[3],"totally",u[1],"!")
[1] "R is totally awesome !"
可选参数seq
> paste(u[2],u[3],"totally",u[1],"!",seq="---")
[1] "R is totally awesome ! ---"
> paste(u[2],u[3],"totally",u[1],"!",sep="---")
[1] "R---is---totally---awesome---!"
> paste(u[2],u[3],"totally",u[1],"!",sep="")
[1] "Ristotallyawesome!"
必要时可以手动插入空格。
连接是非常有用
双引号之中用单引号
3.转义序列
\n | newline |
\r | carriage return |
\t | tab |
\b | backspace |
\a | alert (bell) |
\f | form feed |
\v | vertical tab |
\\ | backslash \ |
\' | ASCII apostrophe ' |
\" | ASCII quotation mark " |
\` | ASCII grave accent (backtick) ` |
\nnn | character with given octal code (1, 2 or 3 digits) |
\xnn | character with given hex code (1 or 2 hex digits) |
\unnnn | Unicode character with given code (1--4 hex digits) |
\Unnnnnnnn | Unicode character with given code (1--8 hex digits) |
R: Quotes
http://127.0.0.1:10817/library/base/html/Quotes.html
转义序列用来控制格式和字符串的间距,而不是普通文本。
getwd()
setwd()
使用getwd打印当前的工作目录并通过setwd去修改它,分隔文件夹必须使用一个斜杠(/),而不是一个反斜杠。
setwd("/folder1/folder2/folder3/")
4.子集与匹配
模式匹配可以从给定的字符串中识别出较短的字符串。
substr(x=foo,start=21,stop=27)
sub函数,gsub函数,pattern
示例:
三、因子
1.R中,因子用于表示不同类别的有限数据,而不是用于表示连续数据。像这样的分类数据系刑事在数据科学中发挥着重要的作用。
表示每个人名字的唯一方式
性别
因子创建元素
可填充类型
唯一形式
命名
factor
工作方式
额外信息——最重要额外信息:levels函数
另外levels的作用(相当于赋值)
firstname[]
2.水平的定义与排序
3.组合与分割
cut
练习已保存至第一部分练习.第四章的练习(通过对比标准答案学习了很多)