R語言變數


變數提供了程式可以操作的命名儲存。R語言中的變數可以儲存原子向量,原子向量組或許多R物件的組合。有效的變數名稱應該是由字母,數位和點或下劃線字元組成。 變數名稱以字母開頭,或者點後面不帶數位。如下一些範例 -

變數名 合法性 原因
var_name2. 有效 由字母,數位,點和下劃線組成
var_name% 無效 含有字元「%」因此無效。只允許點(.)和下劃線(_)組成。
2var_name 無效 以數位開頭,因此無效。
.var_name, var.name 有效 可以以點(.)開頭,但點(.)後面不應是數位。
.2var_name 無效 以點(.)但後跟一個數位使其無效。
_var_name 無效 以下劃(_)開始因此無效。

變數賦值

變數可以使用向左,向右和等於運算子分配值。 可以使用print()cat()函式列印變數的值。 cat()函式將多個變數或專案組合成一個連續的列印輸出。

# Assignment using equal operator.
var.1 = c(0,1,2,3)           

# Assignment using leftward operator.
var.2 <- c("learn","R")   

# Assignment using rightward operator.   
c(TRUE,1) -> var.3           

print(var.1)
cat ("var.1 is ", var.1 ,"\n")
cat ("var.2 is ", var.2 ,"\n")
cat ("var.3 is ", var.3 ,"\n")

執行上面範例程式碼,得到以下結果 -

> print(var.1)
[1] 0 1 2 3
> cat ("var.1 is ", var.1 ,"\n")
var.1 is  0 1 2 3 
> cat ("var.2 is ", var.2 ,"\n")
var.2 is  learn R 
> cat ("var.3 is ", var.3 ,"\n")
var.3 is  1 1

註 - 向量c(TRUE,1)具有邏輯和數位類的混合。所以邏輯類被強制為數位類,使TRUE1

變數的資料型別

在R中,變數本身沒有被宣告為任何資料型別,而是獲取分配給它的R物件的資料型別。 所以R被稱為動態型別語言,這意味著我們可以在程式中使用它時一次又一次地改變同一個變數的變數的資料型別,或者使用同一個變數來儲存任何資料型別。

var_x <- "Hello"
cat("The class of var_x is ",class(var_x),"\n")

var_x <- 34.5
cat("  Now the class of var_x is ",class(var_x),"\n")

var_x <- 27L
cat("   Next the class of var_x becomes ",class(var_x),"\n")

執行上面範例程式碼,得到以下結果 -

> var_x <- "Hello"
> cat("The class of var_x is ",class(var_x),"\n")
The class of var_x is  character 
>
> var_x <- 34.5
> cat("  Now the class of var_x is ",class(var_x),"\n")
  Now the class of var_x is  numeric 
>
> var_x <- 27L
> cat("   Next the class of var_x becomes ",class(var_x),"\n")
   Next the class of var_x becomes  integer 
>

查詢變數

如想要知道工作區中當前可用的所有變數,可使用ls()函式。ls()函式也可以使用模式來匹配變數名。

print(ls());

執行上面範例程式碼,得到以下結果 -

> print(ls());
[1] "string" "var.1"  "var.2"  "var.3"  "var_x"

注意 - 根據您的環境中宣告的變數可能所有不同,所以您的輸出和這裡輸出結果可能不太一樣。

ls()函式可以使用模式來匹配變數名。

# List the variables starting with the pattern "var".
print(ls(pattern = "var"))

執行上面範例程式碼,得到以下結果 -

> print(ls(pattern = "var")) 
[1] "var.1" "var.2" "var.3" "var_x"

以點(.)開頭的變數是隱藏的,它們可以使用ls()函式的「all.names = TRUE」引數列出。如下所示 -

print(ls(all.names = TRUE));

執行上面範例程式碼,得到以下結果 -

> print(ls(all.names = TRUE));
[1] ".var_no" ".var1"   "string"  "var.1"   "var.2"   "var.3"   "var_x"  
>

刪除變數

可以使用rm()函式刪除變數。下面假設要刪除變數var.3。 在列印時丟擲變數錯誤的值。

rm(var.3)
print(var.3)

執行上面查詢程式碼,得到以下結果 -

> rm(var.3)
> print(var.3)
Error in print(var.3) : 找不到物件'var.3'

刪除所有變數可以通過使用rm()ls()函式一起來完成。

rm(list = ls())
print(ls())

執行上面範例程式碼,得到以下結果 -

> rm(list = ls())
> print(ls())
character(0)