分享

控制流在R语言里只是一种辅助工具:循环

 萌小芊 2018-02-17




另外一种控制流语句就是循环,在R里面几乎很难看到循环,因为绝大多数循环都可以使用向量计算的方式解决掉,仅在数据抓取时才使用循环,其目的是降低抓取效率,防止被对方封停ip地址,其实循环很简单,人们使用循环的目的是思路简单,而向量计算思路实现起来就比较困难。

for循环结构
for (变量 in 清单) 语句for (变量 in 清单) {  语句1  语句2}

最常见的当属for循环,其结构就是for小括号,最容易记住,括号里指定一个变量,将清单中的值依次取出赋值给变量,然后执行下面的语句,直到清单中的元素全部取一遍为止,如下:

for循环
seq(1, 9, 2)for (i in seq(1, 9, 2)) print(i + 1)for (i in seq(1, 9, 2)) { print(i + 1) print(i - 1)}

seq函数用于生成等差数列,第一个用于指定数列的起点,2参数用于指定参数的终点,三个参数用于指定公差;2行开始一个for循环,将序列中的元素一一取出开始循环,循环的部分为打印元素加1之后的结果;3行起开始一个for循环,循环部分是一个代码块,打印元素i加1和减1的结果,当清单中的元素执行一遍后,循环自动终止。

for循环与条件判断
for (i in seq(1, 9, 2)) {  if(i < 3="" )="" next="" else="" {="" print(i="" +="">

这里我们将上面的for循环稍加改造添加了一条判断语句,仍然是从序列中取出元素i,如果元素i小于3,执行next函数,表示什么都不干,直接进行下一个元素循环,如果不小于3则打印i加1的结果。

其实除了for循环,我们还可以使用另外一种循环形式即while循环,其结构如下:

while
while (条件1) 语句

很简单几乎和if语句一样,就是if语句的重复形式,举个例子:

while循环
a <- 2while="" (a="">< 30)="" {="" print(a)=""><- a="" +="">

1行创建一个对象,并赋值为a;2行起开始一个循环判断,如果a小于30,则输出a的值,同时将a加上4再复制给a,循环直到a的值不小于30为止。

其实在R里面绝大多数的判断和循环都是没必要的,只有极少情况下才会使用控制流,而使用控制流的目的已经不再是为了常见的判断和循环思维逻辑,可能是为了节省时间,比如你有1亿条文本要清洗处理分词,如果用向量计算的话丢给分词函数一次就可以了,但是1亿条还是多少是要花费一段时间的(并行和分布除外);那么问题来了,如果使用向量变成,中间突然出现意外报错的话,是不会返回结果的,这样又要重头再来,而使用循环加向量计算的方式可以返回部分已经做好的工作,如果中间报错,下次直接从报错的那部分开始就可以了。这一部分我们将在代码优化的和思维优化的章节进行详解。


好主意值得扩散,激发我们创造的动力,非常感谢花粉传播者

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多