R学习笔记1 | 初步认识R

虽然前期陆陆续续间断学习用过R,当时感觉自己现在每次用R又要花很多时间重新理解R的语言逻辑,所以想系统学习下R语言,主要记录下自己的R的学习过程,做下笔记加深印象。

R及Rstudio安装

因为我用R主要用于生信下游的数据分析整理及数据的可视化(画图),这里主要介绍win系统下的R和R语言集成开发环境Rstudio的安装及更新,就不涉及linux系统的的安装了。

1.首次安装

1.先去官网下载R语言






2.下载安装完成之后,直接按平常安装软件按默认设置安装R就行。
3.R安装完成再进行R的集成开发环境Rstudio的下载安装


4.同样的,正常安装,安装完成后打开Rstudio软件自动识别到R语言,要稍微进行相关设置,如文本编码格式,R包的下载镜像等。在菜单栏的Tools--Global Options里进行设置

2.更新

重新卸载安装


认识R语言及初步使用

R语言是一种高级的编程语言,拥有强大的数据处理能力以及出色的数据可视化能力,我这里主要基于genek的课程学习,进行的学习笔记记录,看下来还是比较能满足我的需求。R语言使用依次涉及4个方面:数据的输入数据的分析可视化,以及结果输出

1.数据输入

可以直接进行外界数据的写入:read.table()read.excel();或者直接在页面点击Import Dataset进行数据集导入,注意设置行/列标题(header / row.names)及分隔符(sep)

直接插入数据集

df <- read.table(file = "data/genes.TMM.EXPR.matrix",    #大家习惯赋值给df,dataframe的缩写
           sep = "\t",            #设置分割符为制表符
           header = T,         #设置有列标题
           row.names = 1)    #设置有行标题

我们上面输入的是一个数据框,有行有列,这是个2维数据,下面介绍下其他的数据结构

  • 标量,0维数据,事实上R语言里没有0维数据,后面会具体说
    单个数值即为标量(scalar),如s=1;
    注意R语言里的原子数据(最小数据结构)是向量,所以a=1等同于a=c(1),事实上也就不存在标量;
    另外,R语言的赋值为<-,但这等同于其他编程语言里的=
  • 向量,1维数据
    一列数据即为向量(vector),如v = c(1, 2, 3, 4)
  • 数据框,2维数据
    有行和列,多组向量组成数据框,不同向量的数据类型可能不一样,如:
df = data.frame(row.names = c("张三", "李四", "王五", "赵六", "田七"),
           性别 = c("男","女","男","女","男"),
           年龄 = c(55, 22, 16, 66, 78),
           成绩 = c(56, 16, 80, 100, 24)
           )

二维数据框是由一维数据向量构成的,向量这个最小数据结构,他的数据类型又是什么呢,有以下几种数据类型

  • 数值型,num(Numeric),v1 = 1:4,数值型包括整数型和浮点型

  • 整数型,int(Integer),v = c(1, 2, 3, 4)

  • 浮点型,dbl(double),v = c(sqrt(2), sqrt(3), sqrt(5))

  • 字符型,chr(Character)或 str (String,字符串), v = c("张三", "李四", "王五", "赵六")

  • 逻辑型,logi(Logical),v = c(T, T, F, F)

2.数据分析

数据导入之后即可对数据进行各种处理操作,来达到可进行可视化的数据状态。包括如下分析:

  • 简单计算,通过+ - * /等单个操作符既可以完成的简单计算;
  • 函数,通过sum()``min等函数完成的计算;
  • R包,通过安装各种R号,调用R包里的各种函数进行计算;
  • 流程控制
    -- 线性
    -- 循环,如for()while()
    -- 条件,如if... else...
3.可视化
  • 基于base R传统图像系统,传统的图像系统是由graphics包所提供的一系列函数组成;
  • grid 绘图体系,grid 系统是grid包提供,ggplot2 顶层绘图包是基于grid系统的;
4.结果输出
  • 数据输出
write.table(data_frame, file = "ouputDir/DEGs.csv",      #括号内:变量数据名 + 输出路径及文件名
    sep = "\t")   #指定分隔符为制表符,其他分割符: 分号";"  制表符"\t"  空白" "  竖线"|"  逗号","
--------------
write.csv(data_frame, file = "ouputDir/DEGs.csv")      #write.csv默认分隔符为逗号
  • 图像输出
pdf(file = "outputDir/plot.pdf")   #创建一个空白pdf:plot.pdf
pheatmap(data_frame)    #基于data_frame数据绘制一个热图
dev.off   #停止绘制,可以被理解为 "device off",即关闭设备(停止图像绘制)的意思

关于数据结构

这里稍微展开学习下R语言里的数据结构,前面说了R语言有2种数据结构,分别是向量和数据框。这里主要学习下这两种数据结构的创建取值
在这之前先说下R语言中是没有“标量”这种数据结构的,因为在在R中输入如下判断会得到正确回答,说明R语言中创建标量的时候会自动把标量作为向量来看,即将s = 1当作s = c(1)

> s = 1   #创建一个标量
> v = c(1)   #创建一个向量

> s == v   #判断这两个数据是否相等
[1] TRUE
--创建向量

创建向量就是把一串数据把他塞到一个集合combine里的过程。以下是创建向量数据的几种方式,如普通创建(使用函数c())、使用运算符、运算符:

v1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)    #普通创建
v1 = 1:10  #使用运算符,冒号代表连续证书
v2 = seq(0,10,2) #使用函数,seq() 用于生成等差数列,步长为2
v2 = seq(c(0),c(10),2)    
v3 = rep(1:3,3)   #重复函数
v3 = rep(c(1,2,3), 3)
--对向量取值

从一个向量里取出数据的过程,可以1个也可以多个。以下是几种在向量中取值的方式:1.按位置、2.按名称、3.按逻辑

###按位置
> v3 = rep(1:3,3)   #创建向量v3
> v3[5]   #取向量v3里的第5个值
[1] 2

> v3[c(5,6,7)]   #取向量v3里的第5、第6、第7个值
[1] 2 3 1

###按名称
v4 = c(1, 2, 3, 4)   #创建向量v4
names(v4) <- c("你好", "我好", "他好", "大家好")   #使用names()对向量v4进行命名

> v4["他好"]
他好 
   3

> v4[3]
他好 
   3

> v4[c("你好", "他好")]
你好 他好 
   1    3 

> v4[c(1,3)]
你好 他好 
   1    3

> v4[1:3]
你好 我好 他好 
   1    2    3 

###按逻辑
> v4 > 2
  你好   我好   他好 大家好 
 FALSE  FALSE   TRUE   TRUE 

> v4[c(F,F,T,T)]
  他好 大家好 
     3      4 

> v4[v4 > 2]
  他好 大家好 
     3      4 
++创建数据框

创建数据框就是将多列向量组合成一个2维数据框,每一列是都是一个向量,向量的数据类型可以不同。可以通过函数data.frame()进行创建,但更常见的是通过导入表格数据来创建read.table()read.excel()

 #使用data.frame()创建数据框
df = data.frame(row.names = c("张三", "李四", "王五", "赵六", "田七"),     #首先定义行名 
           性别 = c("男","女","男","女","男"),     #第一列,向量类型为字符型,列名/向量名 = c()
           年龄 = c(55, 22, 16, 66, 78),     #第二列,向量类型为数值型,列名/向量名 = c()
           成绩 = c(56, 16, 80, 100, 24)     #第三列,向量类型为数值型,列名/向量名 = c()
           )

> df
     性别 年龄 成绩
张三   男   55   56
李四   女   22   16
王五   男   16   80
赵六   女   66  100
田七   男   78   24

#使用read.table()创建数据框
genes.EXPR1 <- read.table(file = "data/genes.TMM.EXPR.matrix",
           sep = "\t",
           header = T,
           row.names = 1)    
++对数据框取值

不同于向量,数据框是2维数据,因此需要确定“行”和“列”两个条件: 。同样也是三种方式:1.按位置, df[行号,列号];2.按名称,df["行名","列名"];3.按逻辑,对列进行筛选df[逻辑向量,]

###按位置
> df[2, 3]
[1] 16

> df[c(2,3),c(2,3)]
     年龄 成绩
李四   22   16
王五   16   80

> df[2:3,2:3]
     年龄 成绩
李四   22   16
王五   16   80

###按名称
> df["李四", "成绩"]
[1] 16

> df[c("李四","王五"), c("年龄","成绩")]
     年龄 成绩
李四   22   16
王五   16   80

> df[2:3, c("年龄","成绩")]
     年龄 成绩
李四   22   16
王五   16   80

###按逻辑
> df[df$成绩 > 60,]   
     性别 年龄 成绩
王五   男   16   80
赵六   女   66  100

关于数据类型

向量的数据类型,前面也说了,主要包括:数值型、字符型、逻辑型。这里记下每种数据类型的几种常见操作:
数值型,num(Numeric)

###还是用df数据框举例
df = data.frame(row.names = c("张三", "李四", "王五", "赵六", "田七"),    
           性别 = c("男","女","男","女","男"),     
           年龄 = c(55, 22, 16, 66, 78),  
           成绩 = c(56, 16, 80, 100, 24)     
           )

> df
     性别 年龄 成绩
张三   男   55   56
李四   女   22   16
王五   男   16   80
赵六   女   66  100
田七   男   78   24

> class(df$性别)
[1] "character"
> class(df$年龄)
[1] "numeric"
> class(df$成绩)
[1] "numeric"

> df$成绩 > 60
[1] FALSE FALSE  TRUE  TRUE FALSE

> df$成绩 + 10
[1]  66  26  90 110  34

> df$成绩 * 2
[1] 112  32 160 200  48

> df$成绩 %/% 10    #整除取整
[1]  5  1  8 10  2

> df$成绩 %% 10   #整除取余
[1] 6 6 0 0 4

> mean(df$成绩)
[1] 55.2
  • 字符型,chr(Character)或 str (String,字符串)
    对字符串进行操作常用到stringr软件包,tidyverse包括了这个
s = c("a", "T", "CccTGG", "gGGttAA", "TTttttAAAaaaCCC")    #创建字符型向量
library(stringr)    #加载stringr包

> str_to_upper(s)     #str_to_upper()函数
[1] "A"               "T"               "CCCTGG"          "GGGTTAA"         "TTTTTTAAAAAACCC"
> str_to_lower(s)      #str_to_lower()函数
[1] "a"               "t"               "ccctgg"          "gggttaa"         "ttttttaaaaaaccc"

> str_count(s,"t")    #str_count()函数
[1] 0 0 0 2 4
> str_count(str_to_lower(s),"t")
[1] 0 1 1 2 6

> str_replace(str_to_upper(s),"T", "U")     #str_replace()函数
[1] "A"               "U"               "CCCUGG"          "GGGUTAA"         "UTTTTTAAAAAACCC"
> str_replace_all(str_to_upper(s),"T", "U")
[1] "A"               "U"               "CCCUGG"          "GGGUUAA"         "UUUUUUAAAAAACCC"
  • 逻辑型,logi(Logical),v = c(T, T, F, F)


\color{blue} {思维导图}

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

推荐阅读更多精彩内容