另外一種控制流語句就是循環(huán),在R里面幾乎很難看到循環(huán),因為絕大多數(shù)循環(huán)都可以使用向量計算的方式解決掉,僅在數(shù)據(jù)抓取時才使用循環(huán),其目的是降低抓取效率,防止被對方封停ip地址,其實循環(huán)很簡單,人們使用循環(huán)的目的是思路簡單,而向量計算思路實現(xiàn)起來就比較困難。 for循環(huán)結(jié)構(gòu)for (變量 in 清單) 語句for (變量 in 清單) { 語句1 語句2} 最常見的當(dāng)屬for循環(huán),其結(jié)構(gòu)就是for小括號,最容易記住,括號里指定一個變量,將清單中的值依次取出賦值給變量,然后執(zhí)行下面的語句,直到清單中的元素全部取一遍為止,如下: for循環(huán)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)}
for循環(huán)與條件判斷for (i in seq(1, 9, 2)) { if(i < 3="" )="" next="" else="" {="" print(i="" +=""> 這里我們將上面的for循環(huán)稍加改造添加了一條判斷語句,仍然是從序列中取出元素i,如果元素i小于3,執(zhí)行 其實除了for循環(huán),我們還可以使用另外一種循環(huán)形式即while循環(huán),其結(jié)構(gòu)如下: whilewhile (條件1) 語句 很簡單幾乎和if語句一樣,就是if語句的重復(fù)形式,舉個例子: while循環(huán)a <- 2while="" (a="">< 30)="" {="" print(a)=""><- a="" +=""> 1行創(chuàng)建一個對象,并賦值為a;2行起開始一個循環(huán)判斷,如果a小于30,則輸出a的值,同時將a加上4再復(fù)制給a,循環(huán)直到a的值不小于30為止。 其實在R里面絕大多數(shù)的判斷和循環(huán)都是沒必要的,只有極少情況下才會使用控制流,而使用控制流的目的已經(jīng)不再是為了常見的判斷和循環(huán)思維邏輯,可能是為了節(jié)省時間,比如你有1億條文本要清洗處理分詞,如果用向量計算的話丟給分詞函數(shù)一次就可以了,但是1億條還是多少是要花費一段時間的(并行和分布除外);那么問題來了,如果使用向量變成,中間突然出現(xiàn)意外報錯的話,是不會返回結(jié)果的,這樣又要重頭再來,而使用循環(huán)加向量計算的方式可以返回部分已經(jīng)做好的工作,如果中間報錯,下次直接從報錯的那部分開始就可以了。這一部分我們將在代碼優(yōu)化的和思維優(yōu)化的章節(jié)進行詳解。 |
|
來自: 萌小芊 > 《統(tǒng)計》