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

R

3 Comments

  1. derek

    你好,想问一下,因子变量那部分,sample计划是10000个,为什么下面写5000呢,很困惑,多谢

    • G. T. Wang

      抱歉,這是我筆誤寫錯了,目前文章已經更正,謝謝您。

Leave a Reply