跳到主要內容

R 語言的基本功[程式邏輯結構]

程式邏輯結構

函數

以下透過平均數mean

mean(0:20) 
## [1] 10
x<-c(2,5,8,56,NA)
mean(x,na.rm = TRUE)
## [1] 17.75

亦可自行定義函數

hell <- function(x,y) {
  print("hello world")
  sum <- 0
  for(i in x:y) {
    sum <- sum+i
  }
    return(sum)
}
hell(3,20)
## [1] "hello world"
## [1] 207

邏輯判斷

1.非

x <- 1
!x < 2
## [1] FALSE
x > 0
## [1] TRUE

2.和

&&及&差別在於前者能判斷單一值,後者則判斷多個值

1:3 < 2 & 3 > 2
## [1]  TRUE FALSE FALSE
1:3 < 2 && 3:5 > 2
## [1] TRUE

3.或

||及|差別在於前者能判斷單一值,後者則判斷多個值

1 < 2 | 3:5 > 2
## [1] TRUE TRUE TRUE
1 < 2 || 3:5 > 2
## [1] TRUE

條件判斷

透過判斷指定的條件後,去做接下來的動作 主要以if else以及switch

x<-10
if(x<=9){
  x<-x+10
}else
  x<-10
x
## [1] 10

亦可寫成單行用法

x<-10
if(x<5) y<-10 else y<-1
y
## [1] 1
ifelse(1:10<=5,'NA',0)
##  [1] "NA" "NA" "NA" "NA" "NA" "0"  "0"  "0"  "0"  "0"

For迴圈

必須注意的在迴圈運算中如果有用到的新變數時,必須先定義變數。

x<-sample(45:50)
for (i in x) {
  print(i)
}
## [1] 46
## [1] 47
## [1] 48
## [1] 50
## [1] 49
## [1] 45
x <- 0
for(i in 1:20) {
  if(i==9){break}
x <- x+i
print(x)}
## [1] 1
## [1] 3
## [1] 6
## [1] 10
## [1] 15
## [1] 21
## [1] 28
## [1] 36
x <- matrix(1:20,4,5)
x
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    5    9   13   17
## [2,]    2    6   10   14   18
## [3,]    3    7   11   15   19
## [4,]    4    8   12   16   20
for (i in 1:length(x)) {
  if(i !=1) x[i] <- (x[i] + x[i-1])/i
}
x
##       [,1]     [,2]     [,3]     [,4]     [,5]
## [1,] 1.000 1.275000 1.127406 1.083982 1.062764
## [2,] 1.500 1.212500 1.112741 1.077427 1.059042
## [3,] 1.500 1.173214 1.101158 1.071828 1.055739
## [4,] 1.375 1.146652 1.091763 1.066989 1.052787

While迴圈

while和for 迴圈差別在於前者是透過邏輯判斷進行循環;後者則制定一有限變數或向量物件來循環。

以下為與for迴圈一樣的簡單迴圈。

x <- 0
while(x<=7){
  print(x)
  x<-x+1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7

無限迴圈就是條件是結果永遠皆為1(TRUE),則迴圈無法停止。

x <- 0 while(1){ print(x) x<-x+1 }

x <- 0
while(x<10) {
  x<- x+1
  if(x==8) {
    print("next:no8")
    next}
  print(x)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] "next:no8"
## [1] 9
## [1] 10

repeat迴圈

Repeat與while相似,但後者有邏輯判斷;前者則無。

如下為最基礎的無限迴圈範例

x<-1 repeat(print(x))

x<-1
y<-0
repeat{
  if(x>50) break
  y<-x+y
  x<-x+1
}
x
## [1] 51
y
## [1] 1275

break與next不同於前者為直接跳出迴圈,不再執行迴圈;後者則是跳出迴圈某區塊,並繼續執行下個循環。

x <- sample(1:20)
for (i in x) {
  if(i>8){
    print("Number > 8")
    next}
  if(i==5){
    print("Hello")
    break}
  print(i)}
## [1] "Number > 8"
## [1] 8
## [1] 6
## [1] "Number > 8"
## [1] "Hello"

聯絡表單

名稱

以電子郵件傳送 *

訊息 *