在 R 中所有的變數都有一個類別(class)屬性,它紀錄每個變數所屬的類別,例如大部分的數值都屬於 numeric
類別,而邏輯值則是屬於 logical
類別。
numeric
類別,而邏輯向量屬於 logical
類別,因為在 R 中最基礎的資料結構就是向量,並沒有單一的純量。
R 的 class
函數可以用來判斷變數所屬的類別:
class(c(TRUE, FALSE))
[1] "logical"
由 TRUE
與 FALSE
所組成的向量是屬於 logical
類別。
除了類別(class)之外,R 的變數還有一個內部儲存用的類型(type)屬性、一個模式(mode)屬性,以及一個儲存模式(storage mode)屬性,這幾種屬性是前幾代舊版的 R 所遺留下來的,一般的使用者在大部份的狀況下並不會直接使到它們(除非您準備要加入 R 的核心開發者團隊),目前我們只需要熟悉類別(class)即可,以下我們在討論變數的類型時,都會以變數的類別(class)為主。關於四種屬性的對應關係,請參考後面的補充資料。
在 R 中的數值總共有三種,分別為:
numeric
:浮點數。integer
:整數。complex
:複數。我們可以使用 class
函數來檢查變數的類型,一般的數字預設都會是浮點數:
class(3)
[1] "numeric"
如果要指定整數,可以在數字後面加上 L
:
class(3L)
[1] "integer"
這是複數:
class(2 + 3i)
[1] "complex"
一般的序列會是整數:
class(5:10)
[1] "integer"
序列經過某些數學運算之後,會轉為浮點數:
class(sqrt(5:10))
[1] "numeric"
不過某些別的數學運算也還是會保持整數的類型:
class(sum(5:10))
[1] "integer"
這是浮點數組成的序列:
class(1.3:5.3)
[1] "numeric"
R 的 .Machine
這個內建變數中有一些關於數值資料的資訊,這些資訊可能會因為不同的電腦而有不同(不過對大多數的電腦而言,通常都是一樣的),以下是跟一般使用者比較相關的數值。
.Machine$double.xmax
與 .Machine$double.xmin
分別表示目前 R 所能處理的最大浮點數與最小正浮點數:
.Machine$double.xmax
[1] 1.797693e+308
.Machine$double.xmin
[1] 2.225074e-308
.Machine$integer.max
則是 R 可以處理的最大整數值:
.Machine$integer.max
[1] 2147483647
2147483647 這個值就等於 (2^{31}-1)。
.Machine$double.eps
是 R 中不同數值的最小差異值,如果兩個不同數值的差異小於這個值,那麼 R 會將兩個數值視為相同的,而 all.equal
在判斷兩個向量是否相同時,也是使用這個值。
.Machine$double.eps
[1] 2.220446e-16
如果要讓 R 判斷 1 + (epsilon) 不等於 1,則這個 (epsilon) 值就不可以小於上面這個門檻值,如果 (epsilon) 小於這個門檻值,R 就會無法判斷:
1 + 2.220446e-16 == 1
[1] FALSE
1 + 2.220446e-17 == 1
[1] TRUE