您当前的位置:首页 > r

R语言 t检验多核并行运算 v1.2

对函数进行了些许修改,使其能对NA数据正确处理,下载点这里
wjjlinux系统宝典
国庆前写了一个关于R语言中t检验的多核计算函数,不幸的是这个函数不仅不能有效的减少计算时间,反而将时间变为原来计算时间的10倍,堪称绝对失败的一个尝试。经过国庆期间的努力,终于修改了一个新的版本,新的版本可以有效的减少计算时间。
wjjlinux系统宝典
函数下载地址:http://s.yunio.com/tmw8rc
 
wjjlinux系统宝典
R语言 <wbr>t检验多核并行运算 <wbr>v1.2wjjlinux系统宝典
wjjlinux系统宝典
wjjlinux系统宝典
图中的1表示为单核进行计算时,不使用multicore包,后面的一次为1:8核进行计算时间。可以明显发现计算时间的减少。
wjjlinux系统宝典
wjjlinux系统宝典
wjjlinux系统宝典
#These two function are based on the package "multicore"
#It can be reduce your cost efficiently when you run t-testfor bulk data 
wjjlinux系统宝典
sc.t.test<-function(data)
{
    if(!is.vector(data) &!is.matrix(data)) stop("Need a vector or a matrix...")
    if(length(data) != floor(length(data)/2)*2)stop("There is odd number...")
    if(is.vector(data))
    
      k<-unlist(t.test(data[1:5],data[6:10])[3])
    }
    if(is.matrix(data))
    {
      k<-array(numeric())
      for(i in 1:length(data[,1]))
      {
       k[i]<-unlist(t.test(data[i,1:5],data[i,6:10])[3])
      }
    }
    return(k)
}
wjjlinux系统宝典
mc.t.test<-function(data,mc.core=parallel::detectCores())
{
p<-array(numeric())
k<-array(numeric())
mc.core<-ifelse(mc.core
for( i in 1:mc.core)
{
    length<-ifelse(i==mc.core,(length(data[,1])-ceiling(length(data[,1])/mc.core)*(i-1)),(ceiling(length(data[,1])/mc.core)))
   start<-ifelse(i==mc.core,ceiling(length(data[,1])/mc.core)*(i-1)+1,(i-1)*length+1)
   end<-ifelse(i==mc.core,length(data[,1]),i*length)
    if (end>= length(data[,1])) end = length(data[,1])
    if (start>= length(data[,1])) start = length(data[,1])
    if(start != end ){p[i]<-parallel(sc.t.test(data[start:end,]))$pid}else{p[i]<-parallel(sc.t.test(data[start,]))$pid}
    if(end ==length(data[,1])) break
}
   result<-unlist(collect(p))
   attributes(result)<-NULL
    return(result)
}
wjjlinux系统宝典
wjjlinux系统宝典


沪ICP备10206494号-4