R:算術和邏輯運算子及數值
R語言基本運算子
運算子 |
描述 |
x + y |
加法 |
x - y |
減法 |
x * y |
乘法 |
x / y |
除法 |
x ^ y |
乘冪 |
x %% y |
模運算 |
x %/% y |
整數除法 |
x == y |
判斷是否相等 |
x <= y |
判斷是否小於等於 |
x >= y |
判斷是否大於等於 |
x && y |
標量的邏輯“與”運算 |
x || y |
標量的邏輯“或”運算 |
x & y |
向量的邏輯“與”運算(x、y以及運算結果都是向量) |
X | y |
向量的邏輯“或”運算(x、y以及運算結果都是向量) |
!x |
邏輯非 |
R語言表面上沒有標量的型別,因為標量可以看作是含有一個元素的向量,但我們看到表中,邏輯運算子對標量和向量有著不同的形式,這雖然看起來很奇怪,但這種區別很有必要。
> x <- c( TRUE, FALSE, TRUE )
> y <- c( TRUE, TRUE, FALSE )
> x & y
[1] TRUE FALSE FALSE
> x[1] && y[1]
[1] TRUE
> x && y
[1] TRUE
> if( x[1] && y[1] ) print( "both TRUE" )
[1] "both TRUE"
> if( x & y ) print( "both TRUE" )
[1] "both TRUE"
Warning message:In if (x & y) print("both TRUE") : the condition has length > 1 and only the first element will be used
問題的關鍵在於,if結構條件判斷語句的取值,只能是一個邏輯值,而不是邏輯值的向量,這也是為什麼前面這個例子會出現警告提示,因此“&”和“&&”這兩種運算子的存在是有必要的。
邏輯值TRUE和FALSE可以縮寫為T和F(兩者都必須大寫),而在算術表示式中,它們會轉換為1和0。
> 1 < 2
[1] TRUE
> ( 1 < 2 ) * ( 3 < 4 )
[1] 1
> ( 1 < 2 ) * ( 3 < 4 ) * ( 5 < 2 )
[1] 0
> ( 1 < 2 ) == TRUE
[1] TRUE
> ( 1 < 2 ) == 1
[1] TRUE
►建立自己的二元運算子
可以建立自己的二元運算子,只要寫一個名稱是以%開始和結束的函式。函式的兩個引數都是某種資料型別,並返回同樣型別的值。
> "%a2b%" <- function( a, b ){
+ return ( a + 2 * b )
+ }
> 3 %a2b% 5
[1] 13