Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用apply函数加快嵌套for循环的速度_R_Apply_Bioinformatics_Bioconductor - Fatal编程技术网

使用apply函数加快嵌套for循环的速度

使用apply函数加快嵌套for循环的速度,r,apply,bioinformatics,bioconductor,R,Apply,Bioinformatics,Bioconductor,我不擅长使用apply函数族 为了提高计算速度,我想使用apply函数族,而不是以下类型的嵌套循环,循环次数为9076x9076次。下面给出了最小可再现数据。请帮忙 数据: 代码: if(!requireNamespace(“BioManager”,quilly=TRUE)) 安装软件包(“BioManager”) BioManager::安装(“GO.db”,version=“3.8”) BioManager::安装(“GOSemSim”,version=“3.8”) BioManager::

我不擅长使用apply函数族

为了提高计算速度,我想使用apply函数族,而不是以下类型的嵌套循环,循环次数为9076x9076次。下面给出了最小可再现数据。请帮忙

数据:

代码:

if(!requireNamespace(“BioManager”,quilly=TRUE))
安装软件包(“BioManager”)
BioManager::安装(“GO.db”,version=“3.8”)
BioManager::安装(“GOSemSim”,version=“3.8”)
BioManager::安装(“org.Hs.eg.db”,version=“3.8”)
BioManager::安装(“注释”,版本=“3.8”)
安装程序包(“群集”)
install.packages(“RUnit”)
#从下载csbl.go_1.4.1.tar.gzhttp://csbi.ltdk.helsinki.fi/csbl.go/
#R CMD安装csbl.go_1.4.1.tar.gz
图书馆(org.Hs.eg.db)
图书馆(GO.db)
图书馆(福音书)
mat=矩阵(,5,5)%实际mat=矩阵(,90769076)

hsGO我是GOSemSim的贡献者之一(我的贡献是加速内部代码过程)

如果我理解了你的密码,你想在分子功能亚生物学中比较你基因的功能

你需要一个基因载体或GO术语来进行比较,我还使用了
mgeneSim
函数来比较基因,而不是让你自己来比较GO术语。(如果您想比较go术语,也可以这样做

genes <- rownames(data)
genes_entrez <- mapIds(org.Hs.eg.db, keys = genes, keytype = "SYMBOL", column = "ENTREZID")
m <- mgeneSim(g,  semData=hsGO, measure="Wang", combine="BMA")
colnames(m) <- rownames(data)
colnames(m) <- rownames(data)
       A1BG  A1CF   A2M AAGAB  AAMP
A1BG  1.000 0.477 0.477 0.477 0.383
A1CF  0.477 1.000 0.625 1.000 0.501
A2M   0.477 0.625 1.000 1.000 0.526
AAGAB 0.477 1.000 1.000 1.000 0.815
AAMP  0.383 0.501 0.526 0.815 1.000

基因我是GOSemSim的贡献者之一(我的贡献是加速内部编码过程)

如果我理解了你的密码,你想在分子功能亚生物学中比较你基因的功能

你需要一个基因载体或GO术语来进行比较,我还使用了
mgeneSim
函数来比较基因,而不是让你自己比较GO术语。(如果你想比较GO术语,也可以这样做。)

genes <- rownames(data)
genes_entrez <- mapIds(org.Hs.eg.db, keys = genes, keytype = "SYMBOL", column = "ENTREZID")
m <- mgeneSim(g,  semData=hsGO, measure="Wang", combine="BMA")
colnames(m) <- rownames(data)
colnames(m) <- rownames(data)
       A1BG  A1CF   A2M AAGAB  AAMP
A1BG  1.000 0.477 0.477 0.477 0.383
A1CF  0.477 1.000 0.625 1.000 0.501
A2M   0.477 0.625 1.000 1.000 0.526
AAGAB 0.477 1.000 1.000 1.000 0.815
AAMP  0.383 0.501 0.526 0.815 1.000


基因我认为循环本身是好的,你在有效地循环a和b mat也是循环的适当大小的矩阵,我更喜欢将1:5改为向量=5,seq_len(向量),我的建议是研究多线程解决方案,了解未来的库。我无法对您的代码运行测试,因为这些库不在cran上。这些包似乎都来自Bioconductor。我只能将您的代码的速度提高4倍,使用库(foreach),使用集群库(doMC)>registerDoMC(4),然后将for循环更改为foreach(i=1:9076)%dopar%{…更多信息请访问:请用澄清和代码编辑您的问题。注释中的代码确实无法阅读。我认为循环本身很好,您实际上是在回收a和b mat也是循环的适当大小的矩阵,我更喜欢将1:5更改为类似于vector=5,seq_len(vector),我的建议是研究多线程解决方案,了解未来的库。我无法对您的代码运行测试,因为这些库不在cran上。这些包似乎都来自Bioconductor。我只能将您的代码的速度提高4倍,使用库(foreach),使用集群库(doMC)>registerDoMC(4),然后将for循环更改为foreach(i=1:9076)%dopar%{…更多信息请访问:请用说明和代码编辑您的问题。注释中的代码确实无法阅读。感谢您的回复。但是,我也使用了mgeneSim函数并获得了结果。但我希望在删除每行数据中的“”项后应用mgoSim。如果我在删除“”项后应用mgoSim,我得到了不同的结果。你能解释一下你所说的不同结果是什么意思吗?你能提供一个最小的可重复的例子吗?或者你的意思是你只想用那些GO术语来比较这些基因,而忽略其他GO术语吗?具体来说,我想比较“数据”的所有行向量中的GO术语。对不起,我很抱歉我不确定我是否理解你。你想比较GO术语和基因?或者比较每行之间的GO术语?谢谢你的回答。我想比较每行之间的GO术语。如果我运行上面提到的代码,我会得到以下结果:
mat=structure(c(1,0.255,0.194,0.238,0.089,0.255,1,0.219,0.328,0.188,0.194,0.219,1,0.414,0.113,0.238,0.328,0.414,1,0.125,0.089,0.188,0.113,0.125,1),.Dim=c(5L,5L))
谢谢您的回复。但是,我也使用了mgeneSim函数并获得了结果。但我希望在删除后应用mgoSim“来自每行数据的条目。如果我在删除“”后应用mgoSim,我得到了不同的结果。你能解释一下你所说的不同结果是什么意思吗?你能提供一个最小的可重复的例子吗?或者你的意思是你只想用那些GO术语来比较这些基因,而忽略其他GO术语吗?具体来说,我想比较“数据”的所有行向量中的GO术语。对不起,我很抱歉我不确定我是否理解你。你想比较GO术语和基因?或者比较每行之间的GO术语?谢谢你的回答。我想比较每行之间的GO术语。如果我运行上面提到的代码,我会得到以下结果:
mat=structure(c(1,0.255,0.194,0.238,0.089,0.255,1,0.219,0.328,0.188,0.194,0.219,1,0.414,0.113,0.238,0.328,0.414,1,0.125,0.089,0.188,0.113,0.125,1),.Dim=c(5L,5L))
genes <- rownames(data)
genes_entrez <- mapIds(org.Hs.eg.db, keys = genes, keytype = "SYMBOL", column = "ENTREZID")
m <- mgeneSim(g,  semData=hsGO, measure="Wang", combine="BMA")
colnames(m) <- rownames(data)
colnames(m) <- rownames(data)
       A1BG  A1CF   A2M AAGAB  AAMP
A1BG  1.000 0.477 0.477 0.477 0.383
A1CF  0.477 1.000 0.625 1.000 0.501
A2M   0.477 0.625 1.000 1.000 0.526
AAGAB 0.477 1.000 1.000 1.000 0.815
AAMP  0.383 0.501 0.526 0.815 1.000
go_terms <- unique(unlist(data))
go_terms <- go_terms[go_terms != ""]
go_sim <- mgoSim(as.character(go_terms), as.character(go_terms),  semData=hsGO, measure="Wang", combine=NULL)
genes2go <- apply(data, 1, function(x){x[x != ""]})