使用R创建多个有重复字符的系列变量

    最近一段时间需要对公司投资人群多个时间点是否流失进行预测,需要针对未来20天该用户群是否流失进行预测,于是需要至少建立20个数据集,做20个模型,进行20个预测,这要我重复写20遍代码,这种重复敲代码的感觉可不好(关键是一个模型可不是十行代码能解决问题的,有N多参数),好歹我自诩为人工智能人才,怎么能被重复性的代码难倒呢?


     在网上百度了一下相关文章,发现有论坛已经解决了这个问题,我自己鼓捣了一下,也把相关原理写出来供大家赏析。

     首先我需要重复编写的代码如下:

qbtrain1=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,33])
qbtrain2=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,34])
qbtrain3=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,35])
qbtrain4=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,36])
qbtrain5=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,37])
qbtrain6=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,38])
qbtrain7=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,39])
qbtrain8=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,40])
qbtrain9=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,41])
qbtrain10=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,42])
qbtrain11=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,43])
qbtrain12=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,44])
qbtrain13=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,45])
qbtrain14=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,46])
qbtrain15=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,47])
qbtrain16=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,48])
qbtrain17=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,49])
qbtrain18=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,50])
qbtrain19=xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,51])

     首先大家需要先看看哪些代码是不变的,哪些是变化的,刚开始我打算用paste函数来解决这个问题,但是paste之后的字符不能成为表达式,后来我使用了如下代码解决了这个问题。

for (i in 1:19){
  #配置训练集
  s <- sprintf("qbtrain%s <- xgb.DMatrix(data=qbls1[,2:32],label=qbls1[,32+%s])",i,i)
  eval(parse(text = s))
}

    首先使用了一个循环语句,然后用sprintf函数将格式化字符串输出到变量中(函数中两个s%分别用后面两个i来替换),再然后用parse函数将字符串转化为表达式,最后是用eval函数执行表达式,最终就能使用循环语句将每一个变量循环执行出来。

     当变量或者表达式相同字符较多的时候,均可以使用这种方法使自己的敲代码速度大大加快哟,大家赶紧来学学吧!


参考:http://bbs.pinggu.org/thread-4755603-1-1.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值