代码如下,跑了两个小时~请问有没有哪些地方可以优化?谢谢大神们!
#导入数据
library(xlsx)
workbook<-"D:/R-3.3.1/实例/收入测算/基础数据.xlsx"
NBEV<-read.xlsx(workbook,sheetName="NBEV")
renli<-read.xlsx(workbook,3)
BWFYP<-read.xlsx(workbook,sheetName="BWFYP")
xuqi<-read.xlsx(workbook,9)
jxlv<-read.xlsx(workbook,10)
qita<-read.xlsx(workbook,11)
chuyong<-read.xlsx(workbook,4)
xljt<-read.xlsx(workbook,5)
wangxiao<-read.xlsx(workbook,6)
gljt<-read.xlsx(workbook,7)
jili<-read.xlsx(workbook,8)
jili.M<-read.xlsx(workbook,13) #经理激励,常数不变
I.Jan<-read.xlsx(workbook,12)[8,2]
a.chuyong<-chuyong[,2]
b.chuyong<-chuyong[,3]
c.chuyong<-chuyong[,4] #初佣系数
a.xljt<-xljt[,2]
b.xljt<-xljt[,3] #训练津贴系数
a.wangxiao<-wangxiao[,2] #网销系数
a.gljt<-gljt[,2]
b.gljt<-gljt[,3]
c.gljt<-gljt[,4] #管理津贴系数
a.jili<-jili[,2] #激励系数,除去经理
#正式1年内NBEV每月增长i/100
#正式1-2年NBEV每月增长j/100
#正式2年以上NBEV每月增长k/100
i<-0:50
j<-0:50
k<-0:50
Percent<-expand.grid(i,j,k)
new.NBEV<-as.data.frame(matrix(0.00000001,nrow=8,ncol=11))
NBEV0<-as.data.frame(matrix(0,nrow=8,ncol=11))
myfun<-function(x){
newN7<-NBEV[7,]-NBEV[3,]*x[1]/100-NBEV[4,]*x[2]/100-NBEV[5,]*x[3]/100
#增长后的NBEV
if(sum(newN7>0)==11){
new.NBEV[1,]<-NBEV[1,]
new.NBEV[2,]<-NBEV[2,]
new.NBEV[3,]<- NBEV[3,]*(1+x[1]/100)
new.NBEV[4,]<- NBEV[4,]*(1+x[2]/100)
new.NBEV[5,]<- NBEV[5,]*(1+x[3]/100)
new.NBEV[6,]<-NBEV[6,]
new.NBEV[8,]<-NBEV[8,]
new.NBEV[7,]<-NBEV[7,]-NBEV[3,]*x[1]/100-NBEV[4,]*x[2]/100-NBEV[5,]*x[3]/100
}
rj.NBEV<-new.NBEV*10000/renli #新的人均NBEV
#计算初佣收入
I.chuyong<-a.chuyong*rj.NBEV^2+b.chuyong*rj.NBEV+c.chuyong
#训练津贴
I.xljt<-a.xljt*log(rj.NBEV)+b.xljt
#网销
I.wangxiao<-a.wangxiao*BWFYP
#管理津贴
NBEV0[6,]<-apply(new.NBEV[1:5,],2,sum)
NBEV0[7,]<-apply(new.NBEV[1:6,],2,sum)
I.gljt<-a.gljt*NBEV0^2++b.gljt*NBEV0+c.gljt
#激励
I.jili<-a.jili*new.NBEV+jili.M
#总收入
Income0<-I.chuyong*renli+I.xljt*renli+I.wangxiao*10000+I.gljt*10000+I.jili*10000+xuqi*renli+jxlv*renli+qita
Income<-sum(apply(Income0[1:7,],2,sum))/10000+I.Jan
lab<-c(x[1],x[2],x[3],Income)
return(lab)
}
timestart<-Sys.time();
y<-apply(Percent,1,myfun)
timeend<-Sys.time()
runningtime<-timeend-timestart
print(runningtime)