for(i in 1:length(factor[,1]))
{
#进度条代码
info<- sprintf("已完成 %d%%", round(i*100/u))
setTkProgressBar(pb, i*100/u, sprintf("进度 (%s)", info),info)
#进度条代码
#用j来保存复权因子与股票池中相同股票代码的下标
j=which(factor[i,1]==names(stock_data))
for(k in 2:length(names(factor)))
{
#用l来保存复权因子与股票池中相同日期的下标
l=which(as.numeric(names(factor)[k])==stock_data[[j]][,1])
#备选方案1:利用apply函数
apply(stock_data[[j]][l,3:6],2,fun1,y=factor[j,k])
stock_data[[j]][l,7]=stock_data[[j]][l,7]/factor[j,k]
#备选方案2:直接运算
#stock_data[[j]][l,3:6]=stock_data[[j]][l,3:6]*factor[j,k]/10000
#stock_data[[j]][l,7]=stock_data[[j]][l,7]/factor[j,k]
#每次循环之后均清楚内存,释放空间
gc()
}
}
代码如上,双重循环大约有3000*800次循环,尝试了运用apply,但是速度仍然很慢,有没有办法加快数据读取?是否与list中每个变量为data.frame有关而导致速度很慢?求解!感激不尽!


雷达卡




京公网安备 11010802022788号







