分享

哈佛R语言课程--2.R语法与数据结构

 生物_医药_科研 2019-04-04

 今天是生信星球陪你的第327天


   大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

   就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

   这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

注意:微信自动屏蔽外链,所以链接打不开,请查看原版材料或者简书。
原课程链接:
https://hbctraining./Intro-to-R/lessons/02_introR-syntax-and-data-structures.html
https://github.com/hbctraining/Intro-to-R

系列目录

推荐一套来自哈佛的R语言和差异分析课程

哈佛R语言课程--1.R简介

学习目标

  • 应用R的变量

  • 描述R的各种数据类型。

  • 构建数据结构以存储数据。

1.R语法

现在我们知道如何通过脚本编辑器或控制台与R交互,我们希望使用R来做比添加数字更多的事情。为此,我们需要了解有关R语法的更多信息。

下面是一个示例脚本,突出显示R(语法)的许多不同“词性”:

  • 注释 #

  • 变量函数

  • 赋值运算符 <-

  • 函数中的参数=

注意:缩进和对齐是为了提高清晰度和易读性

示例脚本

# Load libraries
library(Biobase)
library(limma)
library(ggplot2)

# Setup directory variables
baseDir <- getwd()
dataDir <- file.path(baseDir, 'data')
metaDir <- file.path(baseDir, 'meta')
resultsDir <- file.path(baseDir, 'results')

# Load data
meta <- read.delim(file.path(metaDir, '2015-1018_sample_key.csv'), header=T, sep='\t', row.names=1)

2.赋值运算符

要在R中做更多事,需要把对应到 变量,使用赋值运算符,<-。例如,可以使用赋值运算符将赋值3赋值给 x

x <- 3

赋值运算符(<-)将右边的值赋给左边的变量

在RStudio中,赋值符号快捷键是Alt-

3.变量

变量是信息的符号名称或引用代号。计算机编程中的变量类似于“桶”,其中可以存储和引用信息。在桶的外面是一个名字。在引用“桶”时,我们使用“桶”的名称,而不是存储在“桶”中的数据。

在上面的例子中,我们创建了一个名为 x的变量(“桶”)。并放了一个值,3

创建另一个名为y的变量,并赋值为5。

y <- 5

为变量赋值时,R不会向控制台输出任何内容。您可以强制使用括号输出值并或键入变量名来输出值。

y

还可以通过查看RStudio界面右上角的窗口Environment来查看有关变量的信息。

查看environment

现在我们可以通过名称引用这些“桶”来对其中包含的值执行数学运算。在控制台中执行:

x + y

尝试将此操作的结果赋值给另一个名为的变量number

number <- x + y

练习

  1. 尝试将变量x的值更改为5,number会变化吗?

  2. 现在尝试更改变量的值y以包含值10.您需要做什么来更新变量number


关于变量名的提示

变量可以给几乎任何名称,例如xcurrent_temperaturesubject_id。但是,应该记住一些规则/建议:

  • 要明确,但不要太长。

  • 避免使用以数字开头的名称(2x无效但是x2

  • 避免在R中基本功能的名称(例如ifelsefor,看这里的完整列表)。在一般情况下,即使它是允许的,最好不要使用其他的功能的名称(如cTmeandata)作为变量名。如有疑问,请查看帮助以查看该名称是否已被使用。

  • 避免在变量名中使用(.),比如my.dataset。由于历史原因,R中有许多带有“.”的函数,但由于“.”在R(对于methods)和其他编程语言中具有特殊含义,最好避免。

  • 使用名词作为对象名称和动词来表示函数名称

  • 请记住,R区分大小写(例如,genome_length与之不同Genome_length

  • 与代码的样式(放置空格,如何命名变量等)保持一致。在R中,两个流行的风格指南是Hadley Wickham的风格指南和Google的风格指南。

4.数据类型

变量可以包含R中特定类型的值.R使用的六种数据类型包括:

  • 'numeric' 任何数值

  • 'character' 对于文本值,使用引号(“”)表示值

  • 'integer'为整数(例如,2L中,L表示与R,它是一个整数)

  • 'logical'TRUEFALSE(布尔数据类型)

  • 'complex'用实部和虚部来表示复数(例如 1+4i

  • 'raw'
    后两种不作进一步讨论

下表提供了每种常用数据类型的示例:

数据类型例子
数字:1,1.5,20,pi
字符:“anytext”,“5”,“TRUE”
整数:2L,500L,-17L
逻辑:TRUE,FALSE,T,F

5.数据结构

我们知道变量就像桶一样,到目前为止我们已经看到单个值填充的“桶”。number创建时,数学运算的结果也是单个值。变量可以存储多个单独的值,它们可以存储多种不同的数据结构。这些包括但不限于向量(c),因子(factor),矩阵(matrix),数据框(data.frame)和列表(list)。

(1)向量

向量是R中最常见和最基本的数据结构,几乎是R的主力。它基本上只是一组值,主要是数字,

数字向量

或者字符串,

字符串向量

或逻辑值,

逻辑向量

请注意,向量中的所有值必须具有相同的数据类型。如果您尝试创建具有多个数据类型的向量,R将尝试将其强制转换为单个数据类型。

例如,如果您尝试创建以下向量:

混合的向量

R会强制写入:

image

向量就好比有不同的隔间的桶; 向量中的这些隔间称为元素

每个元素都包含一个值,并且一个向量中包含的元素数量没有限制。向量被赋值给单个变量,无论它包含多少元素,最终它仍然是单个实体(桶)。

现在创建一个表示基因组长度的向量,并将其赋值给一个名为glengths的变量。

该向量的每个元素包含单个数值,并且使用c()(组合函数)将三个值组合在一起成为向量。所有值都放在括号内并用逗号分隔。

glengths <- c(4.6, 3000, 50000)
glengths

请注意,environment显示glengths变量是数字,并告诉您glengths向量从元素1开始,到元素3结束(即向量包含3个值)。

向量也可以包含字符。创建另一个包含三个元素的向量species,其中每个元素对应于基因组大小向量(以Mb为单位)。

species <- c('ecoli''human''corn')
species

练习

通过组合我们刚刚创建的两个向量(glengthsspecies)来创建数值和字符值的向量。将此组合向量赋值给名为的新变量combined提示:您需要使用combine c()函数来执行此操作combined在控制台中输出向量,与原始向量相比看起来有什么不同?


(2)因子

因子是一种特殊类型的向量,用于存储分类数据。每个唯一类别被称为factor level(即类别=级别)。因子建立在整数向量之上,使得每个actor level被赋予整数值,从而创建值 - 标签对。

因子

让我们创建一个因子型向量并探索更多。我们首先创建一个描述三种不同表达级别的字符向量:

expression <- c('low''high''medium''high''low''medium''high')

现在我们可以使用函数将此字符向量转换为因子factor()

expression <- factor(expression)

那么,factor()函数实现了什么?

factor_new

表达向量是分类的,因为向量中的所有值都属于一组类别; 在这个例子中,类别是lowmediumhigh。通过将表达向量转换为因子,类别按字母顺序分配整数,高= 1,低= 2,中等= 3。这实际上分配了不同的因子水平。您可以在“ environment”窗口中查看新创建的因子变量和level。

环境中的因子变量

练习

在实验分析中使用三组不同的细胞:正常细胞,基因敲除细胞(一个牛X的基因),以及过表达基因A的细胞。每种细胞类型我们有三个重复。

  1. samplegroup使用以下代码创建一个名为的向量。该载体将包含9个元件:3个对照(“CTL”)样品,3个敲除(“KO”)样品和3个过表达(“OE”)样品:

samplegroup <- c('CTL''CTL''CTL''KO''KO''KO''OE''OE''OE')
  1. samplegroup成因子数据结构。


(3)矩阵

R的矩阵(matrix)是具有相同长度和相同数据类型的向量的集合。向量按行或按列组合为矩阵,创建二维结构。

矩阵

矩阵通常用作统计学数学机制的一部分。矩阵的数据类型通常是数值,并在计算算法中用作checkpoint。例如,如果输入数据的数据类型不同(数字,字符等),则matrix()函数将报错,并停止执行任何下游代码。

(4)数据框

数据框( data.frame)是大多数表格数据的实际数据结构,以及我们用于统计和绘图的内容。Adata.frame类似于矩阵,因为它是相同长度的向量集合,每个向量代表一列。但是,在数据框中,每个向量可以是不同的数据类型(例如,字符,整数,因子)。

数据框

数据框是在R中存储数据的最常用方式,如果系统地使用,则使数据分析更容易。

我们可以通过将向量按列组合来来创建数据框。我们使用data.frame()函数执行此操作,并为函数提供我们想要组合在一起的不同向量。此功能仅适用于相同长度的向量。

df <- data.frame(speciesglengths)

注意data.frame()默认将字符向量转换为因子。将数据框输出到控制台:

df

检查数据集,发现虽然species向量是字符向量,但在数据框中被自动转换为因子(删除引号)。我们将在下一课中展示如何更改函数的默认行为。

请注意,您可以通过单击Environment窗口中的变量名来查看data.frame对象。

列表

列表是R中的一个数据结构,听起来吓人,实际上非常有用。列表是一种数据结构,可以包含任意数量、任何类型的其他数据结构。

列表

如果您希望组合使用不同数据结构的变量,则可以使用list()函数将所有这些变量放入一个列表对象中,并将要组合的所有项目放在括号中:

list1 <- list(species, df, number)

将列表输出到屏幕以查看组件:

list1

[[1]]
[1'ecoli' 'human' 'corn' 

[[2]]
  species glengths
1   ecoli      4.6
2   human   3000.0
3    corn  50000.0

[[3]]
[15

有三个组件对应于我们传入的三个不同变量,可以看到每个变量的结构都被保留。基于数字位置引用列表的每个组件。我们将在后面的课程中更多地讨论如何检查和操作列表的组件。


练习

创建一个名为list2的列表,其中包含speciesglengthsnumber

*本课程由[Harvard Chan Bioinformatics Core (HBC)](https://github.com/hbctraining/In-depth-NGS-Data-Analysis-Course)的教学团队成员开发,中文版由简书ID@小洁忘了怎么分身(公众号@生信星球)整理。
(抱歉昨天对生物信息中心的中文翻译有误,公众号无法修改,但简书中修改了。)


隔壁生信技能树公益视频合辑(学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!)

国内看B站,教学视频链接:https://m.bilibili.com/space/338686099 
国外看YouTube,教学视频链接:https://m./channel/UC67sImqK7V8tSWHMG8azIVA/playlists 

友情链接:

生信工程师入门最佳指南
学徒培养

资料大全


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多