楼主: jmq19950824
1285 1

[问答] 【新人求助!急!】关于for循环加速的问题以及list处理 [推广有奖]

  • 5关注
  • 5粉丝

已卖:226份资源

讲师

48%

还不是VIP/贵宾

-

威望
0
论坛币
3702 个
通用积分
41.9228
学术水平
4 点
热心指数
6 点
信用等级
2 点
经验
36600 点
帖子
259
精华
0
在线时间
662 小时
注册时间
2017-9-18
最后登录
2025-9-1

楼主
jmq19950824 发表于 2018-1-14 21:19:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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有关而导致速度很慢?求解!感激不尽!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:for循环 list For IST length 大数据 R语言

from zero to hero

沙发
cheetahfly 在职认证  发表于 2018-1-15 07:57:47
能不能给一小组数据(能够运行你代码的最小数据集)来说明一下。
另外,我一般在下数据时就把复权后的收盘价一同下载,作为转换的参照。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 18:04