R 语言学习笔记

# R语言使用

## 1.Barpolt 条形图📊

barplot(c("男生"=10, "女生"=7),main="男女生人数",col=c("red","orange") )

#以上代码可能会由于格式的问题,中文字体不显示,因此可以通过使用一下命令进行修改

#par(family='STKaiti')

## 2.打开cvs文件同时显示前几行

> tax.tab <- read.csv("/Users/zhangjian/Desktop/R/Rbook-data/taxsamp.csv", header=TRUE, as.is=TRUE)

> print(head(tax.tab))

## 3.创建R语言格式文件

使用atom创建一个文件同时保存为str.r

sum.of.squares <- function(x){

  sum(x^2)

}

atom的下载地址[https://atom.io/]

## 4打开已经创建的str.r

source("/Users/zhangjian/Desktop/str.r")

#调用已经创建的函数

> sum.of.squares(3)

[1] 9

## 5如何打印向量中的特定位置的数值

x <- c(1:3, 10:13)

print(x[4])

[1] 10

## 6生成规则序列的函数

### Seq req函数

seq(5)

#等同于1:5

seq(2,5)

#等同于2:5

seq(11, 15, by=2)

#产生11,13,15

seq(0, 2*pi, length.out=100)

#产生从0到的等间隔序列, 序列长度指定为100

Pi 就是圆周率的意思

pi =3.1415926535898

### Req函数

#rep()函数用来产生重复数值。 为了产生一个初值为零的长度为n的向量, 用x <- rep(0, n)

#把第一个自变量重复两次

> rep(c(1,3), 2)

[1] 1 3 1 3

> rep(c(1,3), c(2,4))

[1] 1 1 3 3 3 3

#则需要利用R的一般向量化规则, 把第一自变量的第一个元素1按照第二自变量中第一个元素2的次数重复, 把第一自变量中第二个元素3按照第二自变量中第二个元素4的次数重复, 结果相当于c(1,1,3,3,3,3)。

> rep(c(1,3), each=2)

[1] 1 1 3 3

#如果希望重复完一个元素后再重复另一元素,用each=选项, 比如rep(c(1,3), each=2)结果相当于c(1,1,3,3)。

## 7 identical函数

Identical函数用来判断两个对象是否是一样的

> identical(c(1,2,3), c(1,2,NA))

[1] FALSE

> identical(c(1L,2L,3L), c(1,2,3))

[1] FALSE

第二个为什么会不一样,是因为c(1L,2L,3L) 是整数型,而c(1,2,3)是实数型

如何解决以上问题

函数all.equal()可以在比较数值型时不区分整数型与实数型

> all.equal(c(1,2,3), c(1L,2L,3L))

[1] TRUE

## 8字符串中缺失值的表示方法

> x <- c("huh", "nniun", NA)

> x

[1] "huh"  "nniun" NA

**注意空字符串并不能自动认为是缺失值, 字符型的缺失值仍用NA表示。**

## 9 paste()函数

字符串的连接方法

> x <- c(11:29)

> y <- c(1:23)

> paste(x,y)

[1] "11 1"  "12 2"  "13 3"  "14 4"  "15 5"  "16 6"  "17 7"  "18 8"  "19 9"

[10] "20 10" "21 11" "22 12" "23 13" "24 14" "25 15" "26 16" "27 17" "28 18"

[19] "29 19" "11 20" "12 21" "13 22" "14 23"

## 10 as.numeric()函数

将其他类型的数值转换成数值类型

> x <- c("7896778565", "090909")

> x

[1] "7896778565" "090909"   

> as.numeric(x)

[1] 7896778565      90909

说实话能够正常转化为数值类型是数据也就是数值的字符串而已了

## 11 as.character()函数

把数值型转换为字符型

> as.character((1:5)*5)

[1] "5"  "10" "15" "20" "25"

## 12 sprintf()函数

为了用指定的格式数值型转换成字符型, 可以使用sprintf()函数, 其用法与C语言的sprintf()函数相似, 只不过是向量化的

> sprintf('file%03d.txt', c(1, 99, 100))

[1] "file001.txt" "file099.txt" "file100.txt"

这里可以用来批量的给文件命名 ,或还能够批量重命名

## 13 which()函数

which()函数可以返回满足条件的下角标

> x <- c(3, 4, 3, 5, 7, 5, 9)

> which(x > 5)

[1] 5 7

#👆的命令是在向量x中寻找大于5的元素,同时返回其下角标

## 14 如何给向量中的元素命名

ages <- c("李明"=30, "张聪"=25, "刘颖"=28)

#方法一

ages <- c(30, 25, 28)

names(ages) <- c("李明", "张聪", "刘颖")

#方法二

ages <- setNames(c(30, 25, 28), c("李明", "张聪", "刘颖"))

方法三

当给向量中的元素通过以上的方式命名后,可以通过命名后的查找向量中的元素

方法一

> ages[c("李明", "刘颖")]

  李明 刘颖

  30  28

方法二

> print(ages["李明"])

李明

  30

**以上操作实际上建立了字符串到数值的映射表**

#建立映射表

> sex.color <- c("男"="blue", "女"="red")

> sex.color

    男    女

"blue"  "red"

#新建一个包含信息的向量

> sex <- c("男", "男", "女", "女", "男", "女", "女", "女", "女", "男")

#通过使用映射表来查找向量对应的元素

> cols <- sex.color[sex]; print(cols)

    男    男    女    女    男    女    女    女    女    男

"blue" "blue"  "red"  "red" "blue"  "red"  "red"  "red"  "red" "blue"

> unname(cols)

[1] "blue" "blue" "red"  "red"  "blue" "red"  "red"  "red"  "red"  "blue"

## 15 unique()函数

可以将在向量中的重复元素给去重

> unique(c(1, 5, 2, 5))

[1] 1 5 2

##16如何判断一个元素是否在一个向量中

a %in% x用来判断元素是否是在一个集合中

> c(5,6) %in% c(1,5,2)

[1]  TRUE FALSE

#R中的%in%是会作一个逻辑判断

match(x, table) 函数和a %in% x 具有相同的作用

> match(5, c(1,5,2))

[1] 2

> match(5, c(1,7,2))

[1] NA

#match函数会寻找出来匹配的元素的下角标,如果不匹配就会报NA

##17交,并,差集,相等

intersect(x,y)函数用来求两个向量之间的交集

> intersect(c(5, 7), c(1, 5, 2, 5))

[1] 5

union(x,y)函数求并集,结果中不含重复元素

> union(c(5, 7), c(1, 5, 2, 5))

[1] 5 7 1 2

setdiff(x,y)求差集,即x的元素中不属于y的元素组成的集合, 结果中不含重复元素

> setdiff(c(5, 7), c(1, 5, 2, 5))

[1] 7

#这个是c(5, 7)中的元素那个是在c(1, 5, 2, 5)中没有的

> setdiff(c(1, 5, 2, 5), c(5, 7))

[1] 1 2

#这个是c(1, 5, 2, 5)中的元素那个是在c(5, 7)中没有的

setequal(x,y)判断两个集合是否相等, 不受次序与重复元素的影响

> setequal(c(1,5,2), c(2,5,1))

[1] TRUE

> setequal(c(1,5,2), c(2,5,1,5))

[1] TRUE

#👆这个是对两个向量进行的整体判断,不管是向量中元素的顺序和重复的影响

#👇这个是对两组向量中的元素按照固定的顺序进行一一对应,而得出逻辑判断操作

> c(2,5,1) == c(1,5,2)

[1] FALSE  TRUE FALSE

# 问题与解决方法

## 问题1

在Rstudio中的polt面板不显示中文

解决方法:需要指定字体

par(family='STKaiti') # 改字体, 否则不显示中文

## 问题2

在使用Rstudio打开文件的时候,报错(多字节字符串有错)

> tax.tab <- read.csv("/Users/zhangjian/Desktop/R/Rbook-data/taxsamp.csv", header=TRUE, as.is=TRUE)

    Error in make.names(col.names, unique = TRUE) :

      '<b9><ab>˾<b1><e0><ba><c5>'多字节字符串有错

这里可能就是因为编码的问题导致的

Mac系统上一般的编码方式为utf-8 而win中文系统的一般编码方式为GBK

所以在这里需要在Excel保存文件的时候选择UTF-8编码模式就可以解决此问题

## 问题3

源文件编码问题

解决不同平台上面的编码问题导致的源代码无法复用的问题

在source()函数中可以添加encoding=选项

source("/Users/zhangjian/Desktop/str.r", encoding = "UTF-8")

UTF-8中的字母需要设置大写

## 问题4

log10(99.99999999999999999)正常情况下所得的结果肯定不到2,为什么在R 中进行比较的时候 ,会显示 log10(99.99999999999999999)= 2

> sele <- (log10(99.99999999999999999) < 2); print(sele)

[1] FALSE

> sele <- (log10(15) < 2); print(sele)

[1] TRUE

> sele <- (log10(99) < 2); print(sele)

[1] TRUE

> log10(99.9999999999999999999)

[1] 2

这里可能和计算机计算浮点数的原理有关

> log10(99.999)

[1] 1.999996

> log10(99.9999)

[1] 2

## 问题5

以下内容为什么会报错呢

> x <- 1:100000000

> strsplit(x, ',', fixed=TRUE)[[1]]

Error in strsplit(x, ",", fixed = TRUE) : 非字符参数

是因为给变量X 所附的值为一个数值类型不是字符串类型,因此就无法使用  ,'  来切分字符串

# 小技巧

## 1 Atom 文本工具下载地址

[https://atom.io/]

## 2 如何快速切换到上一步命令

键盘⌨️上面的上下键

##3  source()调用源程序文件或者用read.csv()读入数据文件

需要输入文件所在的绝对目录

for example

/Users/zhangjian/Desktop/rstudio-ide.pdf

#如何快速得到文件的绝对目录,可以将文件直接拖到终端里面

## 4 绝对目录与相对目录

绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径

(base) zhangjiandeMacBook-Pro:~ zhangjian$ /Users/zhangjian/Desktop/sly_1_clean_collapsed.fasta

#👆的就是sly_1_clean_collapsed.fasta 文件的绝对目录,其是从盘符开始的

相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系

(base) zhangjiandeMacBook-Pro:~ zhangjian$ cd ~/desktop

#切换到dektop目录

(base) zhangjiandeMacBook-Pro:desktop zhangjian$ ls

#显示desktop目录下的所有文件,这里也可以使用ls -l显示文件的具体参数

PhaseTank_Tutorial sly_1_clean_collapsed.fasta

R 文献库

example 未标题-1.pdf

mi_rna_app 未标题-2

mirdeep2-master 未标题-2.pdf

sly-mirna

(base) zhangjiandeMacBook-Pro:desktop zhangjian$ head ~/desktop/sly_1_clean_collapsed.fasta

>sl1_0_x62057

AGTTACTAATTCATGATCTGGC

>sl1_62057_x45550

TCGGACCAGGCTTCATTCCCC

>sl1_107607_x43623

CTAACAGACCGGTAGACTTGAAC

>sl1_151230_x23996

ACAAACGACTCTCGGCAA

>sl1_175226_x16618

CCCCAAGATGAGTGCTCTCCT

#  知识点

---- 小知识点-1

NA 代表的是"缺失",NULL 代表的是"不存在"。

NA 缺失就想占位符,代表这里没有一个值,但位置存在。

NULL 代表的就是数据不存在。

---- 小知识点-2

UTF-8(8-bit Unicode Transformation Format)(Mac系统内置)

汉字内码扩展规范,称GBK,全名为《汉字内码扩展规范(GBK)》1.0版 (win系统内置)

---- 小知识点-3

变量用来保存输入的值或计算的结果。 变量可以存放各种不同类型的值, 如单个数值、多个数值(称为向量)、单个字符串、多个字符串(称为字符型向量),等等。 单个数值称为标量

---- 小知识点-4

组合数的概念

---- 小知识点-5

浮点数

单精度浮点数

单精度浮点数是用来表示带有小数部分的实数,一般用于科学计算。占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为-3.4E38~3.4E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。

如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。

双精度浮点数

双精度浮点数(double)是计算机使用的一种数据类型,使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是:-1.79E+308 ~ +1.79E+308~

---- 小知识点-6

向量与标量x1 + x2

---- 小知识点-7

矩阵置换

> 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

#将矩阵M进行置换

> t(M)

    [,1] [,2]

[1,]    2    1

[2,]    6  10

[3,]    5    4

#将置换后的矩阵赋值于v

> v <- t(M)

> print(v)

    [,1] [,2]

[1,]    2    1

[2,]    6  10

[3,]    5    4

#矩阵相乘

> y = M %*% v

> print(y)

    [,1] [,2]

[1,]  65  82

[2,]  82  117

**矩阵相乘的原理**

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义  。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑地集中到了一起,所以有时候可以简便地表示一些复杂的模型,如电力系统网络模型。

(img)

(img)

(img)

(img)

---- 小知识点-8

e数学常数

e,作为数学常数,是自然对数函数的底数。有时被称为欧拉数(Euler's number),以瑞士数学家欧拉命名;还有个较少见的名字纳皮尔常数,用来纪念苏格兰数学家约翰·纳皮尔引进对数。它是一个无限不循环小数,数值约是(小数点后20位,OEIS A001113):e = 2.71828182845904523536

> exp(1)

[1] 2.718282

---- 小知识点-9

e数学常数

e,作为数学常数,是自然对数函数的底数。有时被称为欧拉数(Euler's number),以瑞士数学家欧拉命名;还有个较少见的名字纳皮尔常数,用来纪念苏格兰数学家约翰·纳皮尔引进对数。它是一个无限不循环小数,数值约是(小数点后20位,OEIS A001113):e = 2.71828182845904523536

> exp(1)

[1] 2.718282

---- 小知识点-10

布尔数据类型

布尔(英语:Boolean)是计算机科学中的逻辑数据类型,以发明布尔代数的数学家乔治·布尔为名。它是只有两种值的原始类型,通常是真和假。布尔数据类型主要与条件语句相关系,条件语句通过根据开发人员指定的条件式,更改程序控制流来允许评估语句的运算值为真或假(即条件成立或不成立)。这是一种更广泛的逻辑数据类型的特殊情况(参见概率逻辑)-逻辑并不总是只属于布尔类型的。

在一些语言中,布尔数据类型被定义为可代表多于两个真值。例如,ISO SQL:1999标准定义了一个SQL布尔型可以储存三个可能的值:真、假、未知(SQL null被当作未知真值来处理,但仅仅在布尔型中使用)。在此情况下,未知先于真及假,因为布尔型一开始是未有实际值,其值是unknown(也有机会是随机值)而非真。

---- 小知识点-11

缺失值,结果可能为缺失值

> c(1, NA, 3) > 2

[1] FALSE    NA  TRUE

---- 小知识点-12

[:space:] 匹配空白字符,包括空格,tab

gsub('[[:space:]]+', ' ', 'a  cat  in a box', perl=TRUE)

#[[:space:]]+ 这个正则表达式是表示是是多个空格或者tab键的意思

#同时使用一个空格替换多个空格

---- 小知识点-13

R语言里面的大括号、中括号、小括号的作用

()定义函数的参数

> sprintf('file%03d.txt', c(1, 99, 100))

[1] "file001.txt" "file099.txt" "file100.txt"

#在()里面的'file%03d.txt', c(1, 99, 100)是函数sprintf所定义的参数

()在运算中作为优先级

> 3*(4+5-2)-34

[1] -13

> 3*4+5-2-34

[1] -19

#以上代码表明了因为有()的存在,运算的结果发生了变化

[] 用做对象的元素索引

> x = seq(99,699,by=3)

> x[5]

[1] 111

> print(x)

  [1]  99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153

[20] 156 159 162 165 168 171 174 177 180 183 186 189 192 195 198 201 204 207 210

[39] 213 216 219 222 225 228 231 234 237 240 243 246 249 252 255 258 261 264 267

[58] 270 273 276 279 282 285 288 291 294 297 300 303 306 309 312 315 318 321 324

[77] 327 330 333 336 339 342 345 348 351 354 357 360 363 366 369 372 375 378 381

[96] 384 387 390 393 396 399 402 405 408 411 414 417 420 423 426 429 432 435 438

[115] 441 444 447 450 453 456 459 462 465 468 471 474 477 480 483 486 489 492 495

[134] 498 501 504 507 510 513 516 519 522 525 528 531 534 537 540 543 546 549 552

[153] 555 558 561 564 567 570 573 576 579 582 585 588 591 594 597 600 603 606 609

[172] 612 615 618 621 624 627 630 633 636 639 642 645 648 651 654 657 660 663 666

[191] 669 672 675 678 681 684 687 690 693 696 699

#使用seq函数生成了一个从99到699,步长为3的向量,然后可以使用x[5],对这个向量中的数值进行索引

{} 作为代码段落的起止

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354