干货丨零基础如何学习 R 语言?

R语言毕竟是最强大的编程语言,可实现统计和数据可视化的功能。在之前我们专门介绍过几种热图绘制工具,其实在生信领域中大多数热图真的可以直接用R语言就能实现。

R是一种区分大小写的解释型语言。我们可以在命令提示符(>)后每次输入并执行一条命令,或者一次性执行写在脚本文件中的一组命令。R中有多种数据类型,包括向量、矩阵、数据框和列表。R中的多数功能是由程序内置函数和用户自编函数提供的,一次交互式会话期间的所有数据对象都被保存在内存中。一些基本函数是默认直接可用,其他高级函数则包含于按需加载的程序包中。

R语句由函数和赋值构成。R使用<-,而不是传统的=作为赋值符号。

今天小编就先从R语言基础,即R的安装、R的载入和数据导入开始讲起,往后将继续介绍如何用R语言做深入的数据分析。

安装R和RStudio

R可在CRAN上免费下载。建议先安装R包,再安装RStudio。Linux、Mac OSX和Windows都有相应编译好的二进制版本,根据你选择平台的安装说明进行安装即可。RStudio是目前最受欢迎的R集成开发环境,体验效果极佳。而且RStudio上面提供了很多R学习资源,可点击菜单栏查看免费获取。

R提供了很多种功能,而且这些功能通过可选模块的下载和安装来实现的。这些包提供了横跨各种领域的功能,包括分析地理数据、处理蛋白质质谱等。

那什么是包呢?包是R函数、数据、预编译代码以一种定义完善的格式组成的集合。库library中存储了很多包。函数.libPaths()可显示库所在位置,函数library()则可显示库中有哪些包。

R自带了一系列默认包(base、datasets、utils、grDevices、graphics、stats、methods),它们提供了很多种默认函数和数据集。安装好后,它们必须被载入到会话中才能用。命令search()可显示哪些包已加载并可使用。

安装R包

R包是R函数、数据、预编译代码以一种定义完善的格式组成的集合。其实在安装R软件时,R会自动安装一些基础R包,基础R包提供了很多默认函数和数据集,其他大多数R包需要手动安装,例如ggplot2包等。第一次安装一个包,使用命令install.packages()即可。如果不加参数执行install.packages()将显示一个CRAN镜像站点的列表,选择其中一个镜像站点之后,将看到所有可用包的列表,选择其中的一个包即可进行下载和安装。

R包可从三种途径安装。

CRAN

安装R包可以从CRAN上安装,只需在命令行输入代码install. packages(“package_name”)即可。

例如,安装readr包,可以这样输入

Install.packages(“readr”)

Bioconductor

Bioconductor上安装R包。Bioconductor数据库存储了专用于生信领域的R包。在Bioconductor上安装R包可参考其官网的安装方法,操作跟CRAN上类似。

例如从Bioconductor安装用于分析基因组数据的R/Bioconductor包limma,可以输入:

Source(https://bioconductor.org/biocLite.R)

biocLite(“limma”)

也可以使用Biocmanager:install(“limma”)这种形式

Github

另外可从github安装R包,github适用于所有软件开发和数据分析的资源库,以便共享你的包。

对于github上安装一个包,首先应安装devtools包在你电脑上。例如可输入下面代码安装最新版本的survminer的R包

install.packages(“devtools”)

devtools::install_github(“kassambara/survminer”)

R包的载入

包的安装就是从某个CRAN镜像站点下载它并将其放入库中的过程。要在R会话中使用包,还需使用library()命令载入这个包。载入一个包后,就可用一系列新的函数和数据集了。包提供了演示性的小型数据集和示例代码,能让我们尝试这些新功能。

R与数据导入

当你获取到来自多种数据源和数据格式的数据时,R就提供了适用范围广泛的数据导入工具。R可从键盘、文本文件、Microsoft Excel和Access、统计软件、特殊格式文件,及多种关系型数据库中导入数据。

使用键盘输入数据

R中的函数edit()自动调用一个允许手动输入数据的文本编辑器。具体步骤如下:

创建一个空的数据框,其中变量名称和变量模式与理想中的最终数据集一致。

针对这个数据对象调用文本编辑器,输入你的数据,将结果保存回这个数据对象中。

例如,我们创建一个名为mydata的数据框,它有三个变量:age(数值型)、gender(字符型)、weight(数值型),我们再将调用文本编辑器,键入数据,最后保存结果。

mydata <- data.frame(age=numeric(0) ,

    gender=character (0), weight=numeric (0) )

mydata <- edit (mydata)

类似于age=numeric(0)的赋值语句将创建一个指定模式但不含实际数据的变量。edit()函数其实是在对象的一个副本上进行操作。

从带分隔符的文本文件导入数据

我们可用read.table()从带分隔符的文本文件中导入数据。此函数可读入一个表格格式的文件并将其保存为一个数据框。

mydataframe <- read.table(file,  header=logical_value,

     sep=”delimiter”,  row.names=”name”)

其中,file是一个带分隔符的ASCII文本文件,header是一个表明首行是否包含了变量名的逻辑值(TRUE或FALSE),sep用来指定分隔数据的分隔符,row.names是一个可选参数,用以指定一个或多个表示行标识符的变量。

grades <- read.table(“studentgrades.csv”,  header=TRUE,  sep=”,”,

     row.names=”STUDENTID”)

函数read.table()还拥有很多微调数据导入方式的追加选项,如quote参数用于控制导入的信息是否需要被双引号引用,dec参数控制导入数据的小数点后位数等,某些情况下导入被空格分离的字符串如“Bcellresting”,会被自动转化为“B.cell.resting”形式,这种情况下可设置Check.names参数。一般而言,txt文件以制表符“\t”作为分隔符,与excel的csv格式中的逗号分隔稍有不同。

导入Excel数据

读取一个Excel文件夹的最好方式,就是在Excel中将其导出为一个逗号分隔文件(csv),然后再将其导入R中。在Windows系统里,可用RODBC包来方位Excel文件。

首先,下载并安装RODBC包。

install.packages(“RODBC”)

可使用下面代码导入数据:

library(RODBC)

channel <- odbcConnectExcel (“myfile.xls”)

mydataframe <- sqlFetch(channel,  “mysheet”)

odbcClose(channel)

其中,myfile.xls是一个Excel文件,mysheet是要从这个工作簿中读取工作表的名称,channel是一个由odbcConnectExcel()返回的RODBC连接对象,mydataframe是返回的数据框。RODBC也可用于从Access中导入数据。

导入SPSS数据

SPSS数据集可通过foreign包中的函数read.spss()导入到R中,也可用Hmisc包中的spss.get()函数。函数spss.get()是对read.spss()的一个封装,它可自动设置后者的很多参数。

首先,下载并安装Hmisc包

install.package(“Hmisc”)

然后使用以下代码导入数据:

library(Hmisc)

mydataframe <- spss.get (“mydata.sav”,  use.value.labels=TRUE)

这段代码中,mydata.sav是要导入的SPSS数据文件,use.value.labels=TRUE表示让函数将带有值标签的变量导入为R中水平对应相同的因子,mydataframe是导入后的R数据框。

导入SAS数据

R中设计了若干用来导入SAS数据集的函数,包括foreign包中的read.ssd()和Hmisc包中的sas.get()。

我们可以在SAS中使用PROC EXPORT将SAS数据集保存为一个逗号分隔的文本文件,然后将导出的文件读取到R中。如下所示:

SAS程序中:

proc export data=mydata

         outfile=”mydata.csv”

         dbms=csv;

run;

R程序:

Mydata <- read.table(“mydata.csv”,  header=TRUE,  sep=”,”)

导入STATA数据

将Stata数据导入R的代码类似于:

Library(foreign)

Mydataframe <- read.dta (“mydata.dta”)

R与数据导出

除了可以把数据导入R中,还可从R中把数据导出,以便保存数据或在外部程序中使用。那怎样从R中导出数据呢?

符号分隔文本文件

可用write.table()函数将R对象输出到符号分隔文件中。函数使用方法是:

write.table(x,  outfile,  sep=delimiter,  quote=TRUE,   na=”NA”)

其中x是输出对象,outfile是目标文件。例如,

write.table(mydata,   “mydata.txt”,   sep=”,”)

将mydata数据集输出到当前目录下逗号分隔的mydata.txt文件。用路径将输出文件保存到任何地方。用sep=”\t”替换sep=”,”,数据就会保存到制表符分隔的文件中。默认情况下,字符串是放在双引号中,缺失值用NA表示。

Excel表格

xlsx包中的write.xlsx()函数可将R数据框写入到Excel文件中。使用方法是

library(xlsx)

write.xlsx(x,  outfile,  col.Names=TRUE,  row.names=TRUE,

                        sheetName=”Sheet 1”,   append=FALSE)

例如,

library(xlsx)

write.xlsx(mydata,  “mydata.xlsx”)

将mydata数据框保存到当前目录下的Excel文件mydata.xlsx的工作表中(默认为Sheet 1)。在这种情况下,数据集的变量名称被作为电子表格头部,行名称会放在电子表格的第一列。函数会覆盖已存在的mydata.xlsx文件。

统计学程序

foreign包中的write.foreign()可将数据框导出到外部统计软件,会创建两个文件,一个是保存数据的文本文件,另一个是指导外部统计软件导入数据的编码文件。

write.foreign(dataframe,  datafile,  codefile,  package=package)

例如,看下面这段代码:

library(foreign)

write.foreign(mydata,  “mydata.txt”,  “mycode.sps”,   package=”SPSS”)

将mydata数据框导出到当前目录的纯文本文件mydata.txt中,同时还会生成一个用于读取该文本文件的SPSS程序mycode.sps。

Package参数的其他值还有“SAS”和“Stata”

结语

今天跟大家介绍了R的安装、R的载入和数据导入导出,这些还是最基础的东西,其实安装R和载入R包并不复杂,关键就在于数据处理分析。数据的准备可能是数据分析中最具挑战性的任务之一,R提供了丰富函数用以访问外部数据,包括统计软件、数据库等的数据,换言之我们做统计学分析和绘图都需要使用R语言,所以我们对R语言的运用一定要了如指掌,对于生信小白来说,平时没事做,就不要打王者,就把娱乐时间拿来反复练习运用R语言。

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

推荐阅读更多精彩内容