<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>生信菜鸟团 &#187; parallel</title>
	<atom:link href="http://www.bio-info-trainee.com/tag/parallel/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bio-info-trainee.com</link>
	<description>欢迎去论坛biotrainee.com留言参与讨论，或者关注同名微信公众号biotrainee</description>
	<lastBuildDate>Sat, 28 Jun 2025 14:30:13 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.33</generator>
	<item>
		<title>R语言实现并行计算</title>
		<link>http://www.bio-info-trainee.com/956.html</link>
		<comments>http://www.bio-info-trainee.com/956.html#comments</comments>
		<pubDate>Fri, 28 Aug 2015 06:08:15 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[R]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[并行]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=956</guid>
		<description><![CDATA[前面我提到有一个大的运算任务需要很久才完成，所以用到了进度条来监控过程，但并不是 &#8230; <a href="http://www.bio-info-trainee.com/956.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>前面我提到有一个大的运算任务需要很久才完成，所以用到了进度条来监控过程，但并不是改善了计算速度，所以需要用到并行计算，我又在网上找了找。</p>
<p>同样也是一个包，跟matlab的实现过程很像</p>
<p>library(parallel)</p>
<p>cl.cores &lt;- detectCores() #检查当前电脑可用核数。</p>
<p>cl &lt;- makeCluster(cl.cores) #使用刚才检测的核并行运算</p>
<p>#这里用clusterEvalQ或者par开头的apply函数族就可以进行并行计算啦</p>
<p>stopCluster(cl)</p>
<p>R-Doc里这样描述makeCluster函数：Creates a set of copies of R running in parallel and communicating over sockets. 即同时创建数个R进行并行运算。在该函数执行后就已经开始并行运算了，电脑可能会变卡一点。尤其在执行par开头的函数时。</p>
<p>在并行运算环境下，常用的一些计算方法如下：</p>
<p>1、clusterEvalQ(cl,expr)函数利用创建的cl执行expr。这里利用刚才创建的cl核并行运算expr。expr是执行命令的语句，不过如果命令太长的话，一般写到文件里比较好。比如把想执行的命令放在Rcode.r里：clusterEvalQ(cl,source(file="Rcode.r"))</p>
<p>2、par开头的apply函数族。这族函数和apply的用法基本一样，不过要多加一个参数cl。一般如果cl创建如上面cl &lt;- makeCluster(cl.cores)的话，这个参数可以直接用作parApply(cl=cl,…)。当然Apply也可以是Sapply,Lapply等等。注意par后面的第一个字母是要大写的，而一般的apply函数族第一个字母不大写。</p>
<p>另外要注意，即使构建了并行运算的核，不使用parApply()函数，而使用apply()函数的话，则仍然没有实现并行运算。换句话说，makeCluster只是创建了待用的核，而不是并行运算的环境。</p>
<p>参考：<a href="http://www.r-bloggers.com/lang/chinese/1131">http://www.r-bloggers.com/lang/chinese/1131</a></p>
<p>然后我模仿着用并行计算实现自己的需求</p>
<p>#it did work very fast<br />
library(parallel)<br />
cl.cores &lt;- detectCores()<br />
cl &lt;- makeCluster(cl.cores)<br />
clusterExport(cl, "all_dat_t")  #这里是重点，因为并行计算里面用到了自定义函数<br />
clusterExport(cl, "all_prob_id") #但是这个函数需要用到这两个数据，所以需要把这两个数据加载到并行计算环境里面<br />
prob_202723_s_at=parSapply( #我这里用的parSapply来实现并行计算<br />
cl=cl,  #其中cl是我前面探测到的core数量，</p>
<p>deviation_prob, #deviation_prob是我待并行处理的向量</p>
<p>test_pro #这里其实应该是一个自定义函数，我这里就不写出来了,对上面的deviation_prob向量的每个探针都进行判断<br />
)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/956.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
