找回密码
 注册
查看: 4515|回复: 1

分享一个R做网络的小例子

  [复制链接]
发表于 2012-3-12 21:48:11 | 显示全部楼层 |阅读模式
【分享】用R语言实现生物学网络分析
其实用R语言做生物学网络分析是个不错的选择,基于R体系下的Bioconductor项目为用户提供了网络分析的整体解决方案。然而R的网络分析优势却被许多人所忽视,认为“R就是用来做统计的,Bioconductor就是用来做芯片处理的”,其实当你把R当作像C或java那样的编程语言,而把Bioconductor当成开源的网络解决项目时,你将对R强大的网络分析功能刮目相看。

Bioconductor (http://www.bioconductor.org/)是一个基于R语言的、面向基因组信息分析的应用软件集合。Bioconductor的应用功能以包的集成形式呈现在用户面前,它提供的软件包中包括各种基因组数据分析和注释工具,其中大多数工具是针对DNA微阵列或基因芯片数据的处理、分析、注释及可视化的。同时,Bioconductor还提供许多与DNA微阵列相关的数据包。当然,bioconductor网络分析功能也很强大,它包括graph、RBGL、Rgraphviz等软件包来实现网络分析。graph包主要用于构建网络和简单的对网络属性的操作;RBGL包用于对网络分析算法的实现,包括求最短路径,求子网络等。Rgraphviz用于可视化网络。

用R做网络分析的好处是(1)编程简单。不像java、c等那么难学。(2)网络分析灵活。Cytoscape(http://www.cytoscape.org/)等主流的生物学网络分析软件,只能做常规的、固定的网络分析。如:你把网络按照它的格式要求输进去,就能输出许多分析的报表。如果你要是想通过修改图的广度优先算法来实现你的特殊的网络分析算法。Cytoscape这样的软件是帮不上忙的,因为他们是傻瓜式的:点鼠标,就给固定的“它们实现的算法”的分析结果。

以下将结合例子来使大家了解怎样用R中的函数来实现生物学网络分析(内容将不断更新!)。在学习这个部分之前,首先需要在R中安装graph、RBGL、Rgraphviz包。包的下载地址为http://bioconductor.org/packages/release/Software.html。



例子1:构建一个4个蛋白质构成的蛋白质网络(蛋白质1与2、3有物理互作,即边)。

library(graph)

#建立一个character类型的变量,存储蛋白质网络的结点集

nodes<-c("protein1","protein2","protein3","protein4")

g1<-new("graphNEL",nodes=nodes, edgemode="undirected")

#看一下效果

library(Rgraphviz)

plot(g1)




#加一条边

g2 <- addEdge("protein1","protein2", g1)

plot(g2)




#再加一条边

g3 <- addEdge("protein1","protein3", g2)

plot(g3)




如果想加结点,有一个与addEdge类似的函数addNode。如:加一个蛋白质(protein5),它有protein1有一条边。可以这样做:

g4<-addNode("protein5",g3)

g5<-addEdge("protein1","protein5",g4)

plot(g5)


例子2:通过一次性输入边集合来构建例1的网络。

代码如下:

nodes<-c("protein1","protein2","protein3","protein4")

#构建一个空的长度为4的list变量edges。edges中将存储边的信息。它的长度为4,表示网络有4个结点。

edges<-vector("list",length=4)

#把这4个结点的名称赋给edges的名称属性。

names(edges)<-nodes

#构建边protein1-protein2,protein1-protein3

edges[[1]]<-list(edges=c("protein2","protein3"))

#构建边protein2-protein1

edges[[2]]<-list(edges=c("protein1"))

#构建边protein3-protein1

edges[[3]]<-list(edges=c("protein1"))

  #构建网络

gR<- new("graphNEL", nodes=nodes, edgeL=edges,edgemode="undirected")



学习小技巧:(1)如果你想精通R,那么你就要尽量理解经典的R函数或类是怎样开发的,想想它们是为什么要这样构建函数或类?好处是什么?如:看一下edges变量的结果(如下)。你会发现edges是一个两层的list结构。为什么要这样构建呢?如果你要是想开发类似的类,你能够应用这种技巧么?(2)通过edges变量的构建和结果(如下),我们也可以更深的理解list类型变量的构建和应用。(list类型可是R中最复杂、最重要的变量哦!)

$protein1

$protein1$edges

[1] "protein2" "protein3"

$protein2

$protein2$edges

[1] "protein1"

$protein3

$protein3$edges

[1] "protein1"

$protein4

NULL

转自http://bbs.biogo.net/read.php?tid=151408

本帖被以下淘专辑推荐:

  • · Rrrr|主题: 1, 订阅: 0
回复

使用道具 举报

发表于 2012-3-25 21:45:15 | 显示全部楼层
收藏一下 收益匪浅
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-24 13:05 , Processed in 0.021624 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表