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.pngswitch語句規(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