分類: R

R 變數與工作空間

在 R 中所有的變數都有一個類別(class)屬性,它紀錄每個變數所屬的類別,例如大部分的數值都屬於 numeric 類別,而邏輯值則是屬於 logical 類別。

嚴格來說應該是數值向量屬於 numeric 類別,而邏輯向量屬於 logical 類別,因為在 R 中最基礎的資料結構就是向量,並沒有單一的純量。


R 的 class 函數可以用來判斷變數所屬的類別:

class(c(TRUE, FALSE))
[1] "logical"

TRUEFALSE 所組成的向量是屬於 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 處理數值的限制

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)。

如果需要更高精度的數值運算,可以使用 Rmpfr 這個套件,而如果是大數運算,則可以使用 brobdingnab 套件。

.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

Page: 1 2 3 4 5

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago