前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言可视化STRING分析的蛋白互作网络(PPI)~报错解决

R语言可视化STRING分析的蛋白互作网络(PPI)~报错解决

作者头像
用户7010445
发布2020-05-29 16:07:51
2.1K0
发布2020-05-29 16:07:51
举报
文章被收录于专栏:小明的数据分析笔记本

之前分享了这篇文章

R语言可视化STRING分析的蛋白互作网络(PPI)

有一些朋友留言说在重复

net<-graph_from_data_frame(d=links,vertices=nodes,directed = T)

遇到了报错

Error in graph_from_data_frame(d = links, vertices = nodes, directed = T) : Some vertex names in edge list are not listed in vertex data frame

在这里记录一下原因和解决办法

R语言包ggraph可视化网络需要准备两个文件
  • 一个是节点文件
  • 另一个是节点之间的连线文件

比如我的网络是四个节点,分别是A,B,C,D,

节点之间两两连线

对应的数据应该是

代码语言:javascript
复制
> nodes<-data.frame(node=c("A","B","C","D"))
> edges<-data.frame(node1=c("A","A","A","B","B","C"),
+                   node2=c("B","C","D","C","D","D"))
> nodes
  node
1    A
2    B
3    C
4    D
> edges
  node1 node2
1     A     B
2     A     C
3     A     D
4     B     C
5     B     D
6     C     D

接下来是可视化

代码语言:javascript
复制
library(ggraph)
library(igraph)
net<-graph_from_data_frame(d=edges,vertices = nodes,directed = F)
ggraph(net)+
  geom_edge_link()+
  geom_node_point()

image.png

但是如果你的edges文件里出现了nodes文件里没有的节点,

比如我在向edges这个文件里添加一个C~E的边

代码语言:javascript
复制
df<-data.frame(node1="C",node2="E")
edges1<-rbind(edges,df)
edges1

  node1 node2
1     A     B
2     A     C
3     A     D
4     B     C
5     B     D
6     C     D
7     C     E

接下来合并节点和边的时候就会遇到报错

代码语言:javascript
复制
> net<-graph_from_data_frame(d=edges1,vertices = nodes,directed = F)
Error in graph_from_data_frame(d = edges1, vertices = nodes, directed = F) : 
  Some vertex names in edge list are not listed in vertex data frame
一种解决办法是把带E的这条边给他去掉。那如何判断边中哪个节点是多与的呢?

可以使用 %in% 来看

比如

代码语言:javascript
复制
> edges1$node1 %in% nodes$node
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> edges1$node2 %in% nodes$node
[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
> which(edges1$node2 %in% nodes$node)
[1] 1 2 3 4 5 6
> which(! edges1$node2 %in% nodes$node)
[1] 7

这就说明node2这一列第7行没有在 nodes里。

那我们就可以把这一行删掉了

还有一种办法是把E添加到节点里
代码语言:javascript
复制
df1<-data.frame(node="E")
nodes1<-rbind(nodes,df1)
nodes1
net<-graph_from_data_frame(d=edges1,vertices = nodes1,directed = F)
ggraph(net)+
  geom_edge_link()+
  geom_node_point()

image.png

关于string中蛋白互作网络输出文件为什么会出现

边文件中有的节点不是我们自己输入的基因id。这个我也不清楚。

我猜,完全是猜

比如你输入基因 a,b,c ,数据库中某个基因 d 刚好是链接这三个基因的中间点 就像这种,中间是d

那么最终的网络文件中就会多出来d 如果是这种情况,就不能在边文件删除d而是只能在节点中添加d了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R语言包ggraph可视化网络需要准备两个文件
  • 一种解决办法是把带E的这条边给他去掉。那如何判断边中哪个节点是多与的呢?
  • 还有一种办法是把E添加到节点里
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档