重生之我在剑桥大学学习单细胞RNA-seq分析——3. 单细胞分析中的R/Bioconductor简介(1)

3.1 安装包
3.1.1 CRAN
CRAN是最大的R包库。除了成功构建和安装之外,上传包的要求很少,因此文档和支持通常很少,而弄清楚如何使用这些包本身可能是一个挑战。CRAN是R默认搜索的存储库,用于查找要安装的软件包。
3.1.2 Github
Github并不专属于R,任何类型、任何状态的代码都可以上传。上传到github的软件包甚至不能保证一定能安装,更别说能达到其声称的效果了。可以使用R中的devtools软件包直接从github下载并安装R包。
Github也是一个版本控制系统,它存储任何包的多个版本。默认情况下,安装软件包的最新“主”版本。如果您想要旧版本或开发分支,可以使用“ref”参数指定。
3.1.3 Bioconductor
Bioconductor是一个专门用于生物分析的R包库。它对提交有最严格的要求,包括在每个平台上的安装和完整的文档以及一个教程来解释如何使用该包。Bioconductor还鼓励使用标准数据结构/类和编码风格/命名约定,以便理论上可以将包和分析组合成大型流程或工作流。
Bioconductor还要求创建者支持他们的更新,并且每6个月定期发布一次。
3.1.4 源码
安装软件包的最后一种方式是直接从源代码安装。在这种情况下,您必须下载完整构建的源代码文件,通常是packagename.tar.gz,或者克隆github存储库并自行重建软件包。一般来说,仅当您想自己编辑包,或者由于某种原因之前的方法失败时,才会这样做。
3.2 安装说明
根据需求安装具有各种功能的R软件包。
3.3 数据类型
与大多数编程语言一样,R使用变量来存储数据。可以通过输入变量名称、赋值运算符(=<-)和值来创建变量:

> var <- 10
> var
[1] 10

我们创建了名为var的变量,存储数值10。
R中变量总共有20多种类型,但通常只有其中几种直接使用:逻辑型、整数型、数字型、字符型、列表型和S4型。前四个表示单一数据类型,它们是具有一种类型的值的简单数据结构。列表和S4变量允许存储更复杂的数据结构。可以使用typeof函数访问变量的类型。让我们首先讨论单一数据类型。
3.3.1 逻辑型(Logical)变量
逻辑类型存储布尔值,即TRUE和FALSE。它用于存储逻辑运算的结果,条件语句将被强制转换为此类型。

> x = TRUE
> typeof(x)
[1] "logical"
> is.logical(x)
[1] TRUE
> x = 2 > 3
> x
[1] FALSE

R具有所有常见的逻辑运算符:

> x = TRUE
> !x
[1] FALSE
> !(2 > 3)
[1] TRUE
> TRUE | FALSE
[1] TRUE
> !x | (2 > 3)
[1] FALSE
> x & FALSE
[1] FALSE
> x & TRUE
[1] TRUE

3.3.2 数字型(Numeric)和整数型(Integer)变量
数字类型用于存储十进制数。

> x = 1.141
> typeof(x)
[1] "double"
> y = 42
> typeof(y)
[1] "double"
> z = 6.02e23
> typeof(z)
[1] "double"

这里我们看到,尽管R有一个整数型变量,并且42可以更有效地存储为整数,但使用上面使用的符号,它被存储为数字型变量。如果我们想将42存储为整数,则必须使用特定的符号来指定它:

> y = 42L
> typeof(y)
[1] "integer"

R内置了所有常见的数学运算符和函数:

> 2 + 3
[1] 5
> 3 * 4
[1] 12
> 4 / 2
[1] 2
> 5^2
[1] 25
> c = 2*(3+7)/5 + 1
> sin(c)
[1] -0.9589243
> sqrt(c)
[1] 2.236068

3.3.3 字符型(Character)变量
字符类型存储文本。可以使用单引号或双引号创建文本变量,它们完全可以互换:

> a = "some text"
> a
[1] "some text"
> typeof(a)
[1] "character"
> b = 'another text. "Double quotes" can be used here'
> b
[1] "another text. \"Double quotes\" can be used here"

除了标准的字母数字字符外,字符串还可以存储各种特殊字符。特殊字符使用反斜杠后跟单个字符来指定,最相关的是制表符的特殊字符:\t和换行符:\n

> cat("'Hello World\n'")
'Hello World
'>cat("'Hello\tWorld\n'"))
'Hello  World
'>cat("'Hello\nWorld\n'"))
'Hello
World
'>

文本有许多有用的功能,让我们简单讨论一下其中的几个:

> paste("hello","world")
[1] "hello world"
> paste("hello","world",sep='_')
[1] "hello_world"
> paste0("he",'llo')
[1] "hello"
> text = 'hello world'
> gsub('hello','goodbye',text)
[1] "goodbye world"
> grepl('wo',text)
[1] TRUE
> grepl('bye',text)
[1] FALSE

3.3.4 这些都是向量(Vectors)
到目前为止,我们在每个变量中只存储一个值。但实际上,我们刚刚讨论的所有类型都是向量,也就是说,它们可以存储任意数量的给定类型的值。函数c可用于创建新的向量:

> n = c(1,3,-2)
> n
[1]  1  3 -2
> typeof(n)
[1] "double"
> 4:7
[1] 4 5 6 7
> 10:2
[1] 10  9  8  7  6  5  4  3  2
> t = c('hello','world')
> t
[1] "hello" "world"
> typeof(t)
[1] "character"
> length(t)
[1] 2
> t[3]
[1] NA
> t[3] = 'and'
> t[4] = 'goodbye'
> t
[1] "hello"   "world"   "and"     "goodbye"

向量只能存储相同类型的值。如果尝试组合不同类型的值,它们会按照以下顺序自动强制转换为最右边的类型:逻辑->整数->数字->字符:

> (x = c(TRUE,FALSE))
[1]  TRUE FALSE
> typeof(x)
[1] "logical"
> (x = c(TRUE,FALSE,2L,10.2))
[1]  1.0  0.0  2.0 10.2
> typeof(x)
[1] "double"
> (x = c(TRUE,FALSE,2L,10.2,'text'))
[1] "TRUE"  "FALSE" "2"     "10.2"  "text" 
> typeof(x)
[1] "character"
> TRUE + 1
[1] 2
> FALSE + TRUE
[1] 1
> typeof(3L + 1.3)
[1] "double"
> (x=1:10 > 5)
 [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
> sum(x)
[1] 5
> (ages = rnorm(10,mean=60,sd = 10))
 [1] 52.70747 58.83174 44.64927 60.05729 74.86601 56.82183 42.05328 66.38318
 [9] 72.95610 63.28234
> sum(ages>60)
[1] 5

3.3.5 向量操作
由于R中的所有基本类型都是向量,因此运算符和许多函数都是向量化的,也就是说,它们对向量参数的每个元素执行运算:

> a = 1:10
> a^2
 [1]   1   4   9  16  25  36  49  64  81 100
> b = 5:-4
> a * b
 [1]   5   8   9   8   5   0  -7 -16 -27 -40

如果操作数的长度不一样会发生什么?

> a * 2
 [1]  2  4  6  8 10 12 14 16 18 20
> a * (1:2)
 [1]  1  4  3  8  5 12  7 16  9 20
> a * (1:3)
 [1]  1  4  9  4 10 18  7 16 27 10
Warning message:
In a * (1:3) :
  longer object length is not a multiple of shorter object length

3.4 命名向量
R允许对向量元素进行命名:

> (a = c(a=1,b=3,other.name=10))
         a          b other.name 
         1          3         10

可以通过names函数访问和修改名称:

> names(a)
[1] "a"          "b"          "other.name"
> names(a)[1] = 'newname'
> a
   newname          b other.name 
         1          3         10 
> names(a) = LETTERS[1:3]
> a
 A  B  C 
 1  3 10

往期内容:
重生之我在剑桥大学学习单细胞RNA-seq分析——2. scRNA-Seq原始测序数据处理(1)
重生之我在剑桥大学学习单细胞RNA-seq分析——2. scRNA-Seq原始测序数据处理(2)

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

推荐阅读更多精彩内容