R語言--基礎(chǔ)(二)

1. 決策
  • 概述
    決策結(jié)構(gòu)要求程序員指定要由程序評(píng)估或測試的一個(gè)或多個(gè)條件竞慢,以及如果條件被確定為真則要執(zhí)行的一個(gè)或多個(gè)語句,如果條件為假則執(zhí)行其他語句治泥。
Sr.No. 聲明和描述
1 if語句: 由一個(gè)布爾表達(dá)式后跟一個(gè)或多個(gè)語句組成
2 if ... else語句: if語句后面可以有一個(gè)可選的else語句筹煮,當(dāng)布爾表達(dá)式為false時(shí)執(zhí)行
3 switch語句: 允許根據(jù)值列表測試變量的相等性。
  • if語句


    圖1.png
# if語句
x = 30L
if(is.integer(x)) {
    print("X is an Integer")
}

打印結(jié)果:


圖2.png
  • if...else...語句


    圖3.png
# if...else...
x = c("what", "is", "truth")
if("Truth" %in% x) {
    print("Truth is found")
} else {
    print("Truth is not found")
}

打印結(jié)果:


圖4.png
  • switch語句


    圖5.png

    switch語句規(guī)則:
    -- 如果expression的值不是字符串居夹,那么它被強(qiáng)制為整數(shù)败潦。
    -- 在交換機(jī)中可以有任意數(shù)量的case語句。 每個(gè)案例后面都跟要比較的值和冒號(hào)准脂。
    -- 如果整數(shù)的值在1和nargs() - 1(參數(shù)的最大數(shù)目)之間劫扒,則對case條件的相應(yīng)元素求值并返回結(jié)果。
    -- 如果表達(dá)式求值為字符串狸膏,那么該字符串與元素的名稱匹配沟饥。
    -- 如果有多個(gè)匹配,則返回第一個(gè)匹配元素。
    -- 無默認(rèn)參數(shù)可用贤旷。
    -- 在沒有匹配的情況下广料,如果有一個(gè)未命名的元素...它的值被返回。 (如果有多個(gè)這樣的參數(shù)遮晚,則返回錯(cuò)誤。)

示例:

# switch語句
x = switch(
        3,
        "first",
        "second",
        "third",
        "fourth"
    )
print(x)

打印結(jié)果:


圖6.png
2. 包
  • 包路徑和查詢包
# 獲取R包路徑
.libPaths()

# 獲取所有軟件包列表
library()
圖7.png
圖8.png
  • 獲取當(dāng)前加載包
# 獲取當(dāng)前R環(huán)境中加載的所有包
search()

打印結(jié)果:


圖9.png
  • 安裝包
    I. 直接從CRAN安裝
# 從CRAN網(wǎng)頁獲取軟件包
install.packages("spe", repos="https://cran.cnr.berkeley.edu/")

執(zhí)行結(jié)果:

圖10.png

II. 手動(dòng)安裝包
下載安裝包

# 手動(dòng)安裝
install.packages("C:\\Users\\mazaiting\\Desktop\\spec_0.1.3.zip", repos = NULL, type = "source")

執(zhí)行結(jié)果:


圖11.png
  • 裝載包到庫中
library("package Name", lib.loc = "path to library")
3. 循環(huán)
  • 循環(huán)種類
Sr.No. 循環(huán)類型和描述
1 repeat循環(huán):多次執(zhí)行一系列語句拦止,并簡化管理循環(huán)變量的代碼县遣。
2 while循環(huán):在給定條件為真時(shí),重復(fù)語句或語句組汹族。 它在執(zhí)行循環(huán)體之前測試條件萧求。
3 for循環(huán):像while語句,不同之處在于它測試在循環(huán)體的端部的條件顶瞒。

I. repeat循環(huán)


圖12.png

示例:

# repeat語句
v = c("Hello","loop")
cnt = 2

repeat {
   print(v)
   cnt = cnt+1
   
   if(cnt > 5) {
      break
   }
}

打印結(jié)果:


圖13.png

II. while循環(huán)


圖14.png

示例:

# while循環(huán)語句
v = c("Hello","while loop")
cnt = 2

while (cnt < 7) {
   print(v)
   cnt = cnt + 1
}

打印結(jié)果:


圖15.png

III. for循環(huán)


圖16.png

示例:

# for循環(huán)語句
v <- LETTERS[1:4]
for ( i in v) {
   print(i)
}

打印結(jié)果:


圖17.png
  • 循環(huán)控制語句
Sr.No. 控制語句和描述
1 break語句:終止循環(huán)語句夸政,并將執(zhí)行轉(zhuǎn)移到循環(huán)后立即執(zhí)行的語句。
2 next語句:next語句模擬R語言switch語句的行為榴徐。

I. break語句


圖18.png

示例:

# break語句
v <- c("Hello","loop")
cnt <- 2

repeat {
   print(v)
   cnt <- cnt + 1
    
   if(cnt > 5) {
      break
   }
}

打印結(jié)果:


圖19.png

II. next語句


圖20.png

示例:

# next語句
v <- LETTERS[1:6]
for ( i in v) {
   
   if (i == "D") {
      next
   }
   print(i)
}

打印結(jié)果:


圖21.png
4. 數(shù)據(jù)重塑
  • 數(shù)據(jù)幀中加入列和行
    示例:
# 數(shù)據(jù)幀加入列和行
# 創(chuàng)建向量對象
city = c("Tampa", "Seattle", "Hartford", "Denver")
state = c("FL", "WA", "CT", "CO")
zipcode = c(33602, 98104, 06161, 80294)
# 將三個(gè)向量聯(lián)合為一個(gè)數(shù)據(jù)幀
addresses = cbind(city, state, zipcode)
# 打印第一個(gè)輸出提示
cat("# # # # The first data frame 
")
# 打印第一個(gè)數(shù)據(jù)幀
print(addresses)
# 創(chuàng)建另一個(gè)數(shù)據(jù)幀
new.address = data.frame(
    city = c("Lowry", "Charlotte"),
    state = c("CO", "FL"),
    zipcode = c("80230", "33949"),
    stringsAsFactors = FALSE
)
# 打印第二個(gè)輸出提示
cat("# # # The Second data frame
")
# 打印數(shù)據(jù)幀
print(new.address)
# 從數(shù)據(jù)幀中合并行
all.addresses = rbind(addresses, new.address)
# 打印第三個(gè)提示
cat("# # # The combined data frame
")
# 打印結(jié)果
print(all.addresses)

打印結(jié)果:


圖22.png
  • 合并數(shù)據(jù)幀
    示例:
# 合并數(shù)據(jù)幀
library(MASS)
merged.Pima = merge(
    x = Pima.te, 
    y = Pima.tr,
    by.x = c("bp", "bmi"),
    by.y = c("bp", "bmi")
    # by.x = c("skin", "glu"),
    # by.y = c("skin", "glu")
)
# 打印合并后的數(shù)據(jù)
print(merged.Pima)
# 打印行數(shù)
nrow(merged.Pima)

打印結(jié)果:


圖23.png
  • 船舶數(shù)據(jù)集
library(MASS)
# 打印船舶數(shù)據(jù)集
print(ships)

打印結(jié)果:


圖24.png
  • melt()拆分?jǐn)?shù)據(jù)
    示例:
# 此包中提供melt()和cast(), 需要下載
# install.packages("reshape2", repos = "https://cran.cnr.berkeley.edu/")
# melt()拆分?jǐn)?shù)據(jù)
library(reshape2)
library(MASS)

molten.ships = melt(ships, id = c("type", "year"))
print(molten.ships)

打印結(jié)果:


圖25.png
  • dcast()數(shù)據(jù)重構(gòu)
    示例:
library(reshape2)
library(MASS)

molten.ships = melt(ships, id = c("type", "year"))
# print(molten.ships)

# dcast() 重構(gòu)數(shù)據(jù)
recasted.ship = dcast(molten.ships, type+year~variable,sum)
print(recasted.ship)

打印結(jié)果:


圖26.png
5. 函數(shù)
  • 函數(shù)定義
    使用關(guān)鍵字函數(shù)創(chuàng)建R語言的函數(shù)守问。 R語言的函數(shù)定義的基本語法如下
function_name <- function(arg_1, arg_2, ...) {
   Function body 
}
  • 函數(shù)組件
    函數(shù)的不同部分 -
    函數(shù)名稱 -這是函數(shù)的實(shí)際名稱。 它作為具有此名稱的對象存儲(chǔ)在R環(huán)境中坑资。
    參數(shù) -參數(shù)是一個(gè)占位符耗帕。 當(dāng)函數(shù)被調(diào)用時(shí),你傳遞一個(gè)值到參數(shù)袱贮。 參數(shù)是可選的; 也就是說仿便,一個(gè)函數(shù)可能不包含參數(shù)。 參數(shù)也可以有默認(rèn)值攒巍。
    函數(shù)體 -函數(shù)體包含定義函數(shù)的功能的語句集合嗽仪。
    返回值 -函數(shù)的返回值是要評(píng)估的函數(shù)體中的最后一個(gè)表達(dá)式。
  • 內(nèi)置功能
# 內(nèi)置函數(shù)
# 創(chuàng)建一串?dāng)?shù)字柒莉,從32到44
print(seq(32, 44))

# 中間數(shù)
print(mean(25:82))

# 從41加到68
print(sum(41:68))

打印結(jié)果:


圖27.png
  • 自定義函數(shù)
# 用戶定義的函數(shù)
new.function <- function(a) {
    for (i in 1:a) {
        b <- i^2
        print(b)
    }
}

# 調(diào)用函數(shù)
new.function(6)

打印結(jié)果:


圖28.png

代碼下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闻坚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子兢孝,更是在濱河造成了極大的恐慌鲤氢,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件西潘,死亡現(xiàn)場離奇詭異卷玉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)喷市,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門相种,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事寝并◇锎耄” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵衬潦,是天一觀的道長斤蔓。 經(jīng)常有香客問我,道長镀岛,這世上最難降的妖魔是什么弦牡? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮漂羊,結(jié)果婚禮上驾锰,老公的妹妹穿的比我還像新娘。我一直安慰自己走越,他們只是感情好椭豫,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旨指,像睡著了一般赏酥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谆构,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天今缚,我揣著相機(jī)與錄音,去河邊找鬼低淡。 笑死姓言,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔗蹋。 我是一名探鬼主播何荚,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猪杭!你這毒婦竟也來了餐塘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤皂吮,失蹤者是張志新(化名)和其女友劉穎戒傻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜂筹,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡需纳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艺挪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片不翩。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出口蝠,到底是詐尸還是另有隱情器钟,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布妙蔗,位于F島的核電站傲霸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏眉反。R本人自食惡果不足惜昙啄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望禁漓。 院中可真熱鬧跟衅,春花似錦孵睬、人聲如沸播歼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秘狞。三九已至,卻和暖如春蹈集,著一層夾襖步出監(jiān)牢的瞬間烁试,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工拢肆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留减响,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓郭怪,卻偏偏與公主長得像支示,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子鄙才,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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