R求厕,我感興趣的01

函數(shù)自己調(diào)用自己

zhang1

> zhang1 <- function(x)
+ {  
+   if(x==0) # 設(shè)置終止條件嘶朱,防止死循環(huán)
+     x_sum=1
+   else
+     x_sum=x*zhang_1(x-1) #自己調(diào)用自己
+   return(x_sum)
+ }
> zhang1(5)
[1] 120

各種循環(huán)

zhang2

> ## 1度電50元,如果一個月使用超過200度匈睁,電費再加收15%桶蛔。如果電費小于1元吸祟,以四舍五入處理瑟慈。
> 
> zhang2 <- function(deg, unitprice = 50) 
+ {
+   net.price <- deg * unitprice
+   if (deg > 200) #如果超過200度,那么……
+     {
+     net.price <- net.price * 1.15
+    }
+   round (net.price) 
+ }
> zhang2(deg = 150)
[1] 7500
> zhang2(deg = 250)
[1] 14375

zhang3

## 1度電50元屋匕,如果一個月使用超過100度葛碧,電費再加收15%,如果100度(含)以下过吻,電費八五折进泼。如果電費小于1元,以四舍五入處理。

zhang3 <- function( deg, unitprice = 50)
{
  net.price <- deg * unitprice
  if (deg > 100)
    net.price <- net.price * 1.15 #注意形式有何不同
  else
    net.price <- net.price *0.85
  round(net.price)
}
zhang3(80)
zhang3(100)

zhang4

# if語句可有返回值,改寫上例
zhang4 <- function(deg, unitprice = 50)
{
  net.price <- deg * unitprice
  adjustment <- if (deg > 100) 1.15 else 0.85 # if語句返回值
  total.price <- net.price * adjustment
  round(total.price)
}
zhang4(deg = 80)
zhang4(deg = 200)

zhang5

# 接上例子乳绕,更改
zhang5 <- function( deg, unitprice = 50)
{
  net.price <- deg * unitprice
  total.price <- net.price * if (deg >100) 1.15 else 0.85 # if語句直接應用在表達式中
  round(total.price)
}
zhang5(deg = 80)
zhang5(deg = 200)

zhang6

## 1度電50元绞惦,超過120度,加收15%洋措,小于80度翩隧,減免15%。
zhang6 <- function( deg, unitprice = 50)
{
  if (deg >120)
    net.price <- deg * unitprice * 1.15
  else if (deg < 80) # 多重判斷時可用的上
    net.price <- deg * unitprice * 0.85
  else
    net.price <- deg * unitprice 
  round(net.price)
}
zhang6(70) # 注意形式有何不同
zhang6(100)
zhang6(150)

zhang7

## 1度電50元呻纹,超過100度,加收15%专缠,小于100度(含)雷酪,減免15%。有貧困證又用電小于100度涝婉,再減免3成哥力。電費又小于1元的部分,四舍五入墩弯。
zhang7 <- function( deg, poor = FALSE, unitprice = 50)
{
  net.price <- deg * unitprice
  if( deg > 100)
    net.price <- net.price * 1.15
  else 
    {
    net.price <- net.price * 0.85
    if (poor == TRUE)  # 注意吩跋,嵌套的if
      net.price = net.price *0.7
  }
  round(net.price)
}
zhang7(deg = 80)
zhang7(deg=80, poor = TRUE) # 注意,不要寫成 poor == TURE
zhang7(deg=200)
zhang7(deg=200, poor = TRUE)

zhang8

## if不能處理向量,ifelse可以
## if(邏輯判斷渔工, T表達式锌钮,F(xiàn)表達式)
ifelse(c(1,5) >3, 10, 1)
  
## 一度電50塊,用電100度(含)以下引矩,八五折梁丘,100度以上,電費加收15%旺韭。

zhang8 <- function(deg, unitprice = 50)
{
  net.price <- deg * unitprice
  net.price = net.price * ifelse((deg > 100), 1.15, 0.85) #注意用到的是ifelse
  round(net.price)
}
zhang8(c(80,200))

zhang9

## switch.之前的if……else用于多重判斷值漫,這也可用switch語句悔政。注意,它不能用于向量捌蚊。
## switch(判斷挺智,表達式1赴涵,表達式2寄纵,……)判斷之后的值可能是數(shù)字或文字,如果是1,執(zhí)行表達式1,是2绷杜,執(zhí)行表達式2……如果是文字齿诉,執(zhí)行對應得的表達式。
## 1度電50元歇竟,超過120度挥唠,加收15%,小于80度焕议,減免15%宝磨。
zhang9 <- function(deg, unitprice = 50)
{
  if(deg > 120) index <- 1
  if(deg <= 120 & deg >= 80) index <- 2
  if(deg < 80) index <- 3    # 創(chuàng)建3個索引
  switch(index,
   net.price <- deg * unitprice * 1.15,
   net.price <- deg * unitprice,
   net.price <- deg * unitprice * 0.85)
  round(net.price)
}
zhang9(deg = 70)
zhang9(deg = 100)
zhang9(deg = 150)

zhang10

## for循環(huán)≈寻玻可用于向量對象的操作唤锉,格式 for(循環(huán)索引 in 區(qū)間) 單一運算指令。多個指令别瞭,則如下
## for(循環(huán)索引 in 區(qū)間) {系列運算命令}
##計算1到n的和腌紧。
zhang10 <- function(n)
{
  sum_n <- 0
  for(i in n) sum_n <- sum_n + i
  print(sum_n)
}
zhang10(1:2)

zhang11

> ##使用內(nèi)建數(shù)據(jù)集合state.region,找出屬于“North Centra”的州有幾個。
> zhang11 <- function(n)
+ {
+   counter <- 0
+   for(i in n)
+   {
+     if(i == "North Central")
+       counter <- counter + 1
+   }
+   print(counter)
+ }
> state.region # 看一眼長啥樣
 [1] South         West          West          South         West         
 [6] West          Northeast     South         South         South        
[11] West          West          North Central North Central North Central
[16] North Central South         South         Northeast     South        
[21] Northeast     North Central North Central South         North Central
[26] West          North Central West          Northeast     Northeast    
[31] West          Northeast     South         North Central North Central
[36] South         West          Northeast     Northeast     South        
[41] North Central South         South         West          Northeast    
[46] South         West          South         North Central West         
Levels: Northeast South North Central West
> zhang11(state.region)
[1] 12

zhang12


> ##看一眼state.x77
> state.x77
               Population Income Illiteracy Life Exp Murder HS Grad Frost   Area
Alabama              3615   3624        2.1    69.05   15.1    41.3    20  50708
Alaska                365   6315        1.5    69.31   11.3    66.7   152 566432
Arizona              2212   4530        1.8    70.55    7.8    58.1    15 113417
Arkansas             2110   3378        1.9    70.66   10.1    39.9    65  51945
California          21198   5114        1.1    71.71   10.3    62.6    20 156361
Colorado             2541   4884        0.7    72.06    6.8    63.9   166 103766
Connecticut          3100   5348        1.1    72.48    3.1    56.0   139   4862
Delaware              579   4809        0.9    70.06    6.2    54.6   103   1982
Florida              8277   4815        1.3    70.66   10.7    52.6    11  54090
Georgia              4931   4091        2.0    68.54   13.9    40.6    60  58073
Hawaii                868   4963        1.9    73.60    6.2    61.9     0   6425
Idaho                 813   4119        0.6    71.87    5.3    59.5   126  82677
Illinois            11197   5107        0.9    70.14   10.3    52.6   127  55748
Indiana              5313   4458        0.7    70.88    7.1    52.9   122  36097
Iowa                 2861   4628        0.5    72.56    2.3    59.0   140  55941
Kansas               2280   4669        0.6    72.58    4.5    59.9   114  81787
Kentucky             3387   3712        1.6    70.10   10.6    38.5    95  39650
Louisiana            3806   3545        2.8    68.76   13.2    42.2    12  44930
Maine                1058   3694        0.7    70.39    2.7    54.7   161  30920
Maryland             4122   5299        0.9    70.22    8.5    52.3   101   9891
Massachusetts        5814   4755        1.1    71.83    3.3    58.5   103   7826
Michigan             9111   4751        0.9    70.63   11.1    52.8   125  56817
Minnesota            3921   4675        0.6    72.96    2.3    57.6   160  79289
Mississippi          2341   3098        2.4    68.09   12.5    41.0    50  47296
Missouri             4767   4254        0.8    70.69    9.3    48.8   108  68995
Montana               746   4347        0.6    70.56    5.0    59.2   155 145587
Nebraska             1544   4508        0.6    72.60    2.9    59.3   139  76483
Nevada                590   5149        0.5    69.03   11.5    65.2   188 109889
New Hampshire         812   4281        0.7    71.23    3.3    57.6   174   9027
New Jersey           7333   5237        1.1    70.93    5.2    52.5   115   7521
New Mexico           1144   3601        2.2    70.32    9.7    55.2   120 121412
New York            18076   4903        1.4    70.55   10.9    52.7    82  47831
North Carolina       5441   3875        1.8    69.21   11.1    38.5    80  48798
North Dakota          637   5087        0.8    72.78    1.4    50.3   186  69273
Ohio                10735   4561        0.8    70.82    7.4    53.2   124  40975
Oklahoma             2715   3983        1.1    71.42    6.4    51.6    82  68782
Oregon               2284   4660        0.6    72.13    4.2    60.0    44  96184
Pennsylvania        11860   4449        1.0    70.43    6.1    50.2   126  44966
Rhode Island          931   4558        1.3    71.90    2.4    46.4   127   1049
South Carolina       2816   3635        2.3    67.96   11.6    37.8    65  30225
South Dakota          681   4167        0.5    72.08    1.7    53.3   172  75955
Tennessee            4173   3821        1.7    70.11   11.0    41.8    70  41328
Texas               12237   4188        2.2    70.90   12.2    47.4    35 262134
Utah                 1203   4022        0.6    72.90    4.5    67.3   137  82096
Vermont               472   3907        0.6    71.64    5.5    57.1   168   9267
Virginia             4981   4701        1.4    70.08    9.5    47.8    85  39780
Washington           3559   4864        0.6    71.72    4.3    63.5    32  66570
West Virginia        1799   3617        1.4    69.48    6.7    41.6   100  24070
Wisconsin            4589   4468        0.7    72.48    3.0    54.5   149  54464
Wyoming               376   4566        0.6    70.29    6.9    62.9   173  97203
##計算state.x77中的美國人口總數(shù)畜隶。
> zhang12 <- function(n)
+ {
+   zhang.sum <- 0
+   for( i in state.x77[,"Population"])
+     zhang.sum <- zhang.sum + i
+   print(zhang.sum)
+ }
> zhang12(state.x77[,"Population"])
[1] 212321

zhang13

> ## 一度電50塊。用電超過150度号胚,打8折籽慢。此外政府機關(guān)8折,公司用加收2成猫胁,普通家庭收費標準不變箱亿。
> deginfo <- c(80, 80, 200, 200)
> custinfo <- c("goverment", "company", "company", "family")
> zhang13 <- function(deg, customer, unitprice = 50) 
+ {
+   listprice <- deg * unitprice * ifelse(deg > 150, 0.8, 1)
+   adj <- numeric(0) # 這個地方有意思。值為numeric(0)的對象長度為0弃秆,
+                     # 假設(shè)一個對象x届惋,用length(x) == 0 來判斷對象x是不是numeric(0)
+         #還是谷歌清楚:numeric(0) returns a numeric vector of *length 0*, 
+         #so when you add anything  to it you get the same result (it's basically a numeric NULL)
+   for(i in customer)
+     adj <- c(adj, switch(i, goverment = 0.8, company = 1.2, family = 1)) 
+   finalprice <- listprice * adj
+   round(finalprice)
+ }
> zhang13(deginfo, custinfo)
[1] 3200 4800 9600 8000

zhang14

> #這事,也可以這么干
> deginfo <- c(80, 80, 200, 200)
> custinfo <- c("goverment", "company", "company", "family")
> zhang14 <- function(deg, customer, unitprice = 50)
+ {
+   listprice <- deg * unitprice * ifelse(deg > 150, 0.8, 1)
+   num.customer <- length(customer)
+   adj <- numeric(num.customer)
+   for(i in seq_along(customer)) # 賦值字符向量給一個對象菠赚,然后對其seq_along試試
+     adj[i] <- switch(customer[i], goverment = 0.8, company = 1.2, 1)
+   finalprice <- listprice * adj
+   round(finalprice)
+ }
> zhang14(deginfo, custinfo)
[1] 3200 4800 9600 8000

zhang15

> ## while循環(huán)
> ## while(邏輯表達式){系列運算指令} 如果邏輯表達式為T脑豹,循環(huán)繼續(xù),直到為F
> ## 1到n的和
> zhang15 <- function(x)
+ {
+   sum.x <- 0
+   while(x >= 0)
+   {
+     sum.x <- sum.x + x
+     x <- x-1
+   }
+   return(sum.x)
+ }
> zhang15(10)
[1] 55

zhang16


> ##1到n的和
> zhang16 <- function(x)
+ {
+   Sum.x <- 0
+   repeat
+   {
+     Sum.x <- Sum.x + x
+     if (x==0) break # 跳出循環(huán)
+     x <- x-1
+   }
+   return(Sum.x)
+ }
> zhang16(10)
[1] 55

zhang17

## break循環(huán)也可以和for循環(huán)和while循環(huán)配合衡查,可立即跳出循環(huán)瘩欺。
## 1到n的和
> zhang17 <- function(n)
+ {
+   sum.x <- 0
+   for(i in n)
+   {
+     if(sum.x + i > 3000) break
+     sum.x <- sum.x + i
+   }
+   return(sum.x) # print()也可
+ }
> zhang17(1:50)
[1] 1275
> zhang17(1:100) # 計算到72時,和是2926拌牲,到73時超范圍俱饿,break跳出,打印結(jié)果塌忽。
[1] 2926

zhang18


## next語句拍埠。和break一樣,須與if土居,即邏輯表達配合使用枣购,但next只是跳過本次循環(huán)嬉探,不是跳出循環(huán)
##1到n的偶數(shù)和
> zhang18 <- function(n)
+ {
+   Sum.x <- 0
+   for(i in n)
+   {
+     if(i %% 2 != 0) next # 關(guān)鍵步驟
+     Sum.x <- Sum.x + i
+   }
+   print(Sum.x)  
+ }
> zhang18(1:10)
[1] 30
> zhang18(1:100)
[1] 2550
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坷虑,隨后出現(xiàn)的幾起案子甲馋,更是在濱河造成了極大的恐慌,老刑警劉巖迄损,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件定躏,死亡現(xiàn)場離奇詭異,居然都是意外死亡芹敌,警方通過查閱死者的電腦和手機痊远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氏捞,“玉大人碧聪,你說我怎么就攤上這事∫壕ィ” “怎么了逞姿?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵队腐,是天一觀的道長队贱。 經(jīng)常有香客問我,道長勃刨,這世上最難降的妖魔是什么栋烤? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任谒养,我火速辦了婚禮,結(jié)果婚禮上明郭,老公的妹妹穿的比我還像新娘买窟。我一直安慰自己,他們只是感情好薯定,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布始绍。 她就那樣靜靜地躺著,像睡著了一般话侄。 火紅的嫁衣襯著肌膚如雪疆虚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天满葛,我揣著相機與錄音径簿,去河邊找鬼。 笑死嘀韧,一個胖子當著我的面吹牛篇亭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锄贷,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼译蒂,長吁一口氣:“原來是場噩夢啊……” “哼曼月!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柔昼,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哑芹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捕透,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聪姿,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年乙嘀,在試婚紗的時候發(fā)現(xiàn)自己被綠了末购。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡虎谢,死狀恐怖盟榴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情婴噩,我是刑警寧澤擎场,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站几莽,受9級特大地震影響迅办,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜银觅,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坏为。 院中可真熱鬧究驴,春花似錦、人聲如沸匀伏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽够颠。三九已至熙侍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間履磨,已是汗流浹背蛉抓。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剃诅,地道東北人巷送。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像矛辕,于是被迫代替她去往敵國和親笑跛。 傳聞我的和親對象是個殘疾皇子付魔,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容