變量提供了程序可以操作的命名存儲。R語言中的變量可以存儲原子向量,原子向量組或許多R對象的組合。有效的變量名稱應(yīng)該是由字母,數(shù)字和點或下劃線字符組成。 變量名稱以字母開頭,或者點后面不帶數(shù)字。如下一些示例 -
| 變量名 | 合法性 | 原因 |
|---|---|---|
var_name2. |
有效 | 由字母,數(shù)字,點和下劃線組成 |
var_name% |
無效 | 含有字符“%”因此無效。只允許點(.)和下劃線(_)組成。 |
2var_name |
無效 | 以數(shù)字開頭,因此無效。 |
.var_name, var.name |
有效 | 可以以點(.)開頭,但點(.)后面不應(yīng)是數(shù)字。 |
.2var_name |
無效 | 以點(.)但后跟一個數(shù)字使其無效。 |
_var_name |
無效 | 以下劃(_)開始因此無效。 |
變量可以使用向左,向右和等于運算符分配值。 可以使用print()或cat()函數(shù)打印變量的值。 cat()函數(shù)將多個變量或項目組合成一個連續(xù)的打印輸出。
# 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")
執(zhí)行上面示例代碼,得到以下結(jié)果 -
> 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)具有邏輯和數(shù)字類的混合。所以邏輯類被強制為數(shù)字類,使TRUE為1。
在R中,變量本身沒有被聲明為任何數(shù)據(jù)類型,而是獲取分配給它的R對象的數(shù)據(jù)類型。 所以R被稱為動態(tài)類型語言,這意味著我們可以在程序中使用它時一次又一次地改變同一個變量的變量的數(shù)據(jù)類型,或者使用同一個變量來存儲任何數(shù)據(jù)類型。
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")
執(zhí)行上面示例代碼,得到以下結(jié)果 -
> 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
>
如想要知道工作區(qū)中當前可用的所有變量,可使用ls()函數(shù)。ls()函數(shù)也可以使用模式來匹配變量名。
print(ls());
執(zhí)行上面示例代碼,得到以下結(jié)果 -
> print(ls());
[1] "string" "var.1" "var.2" "var.3" "var_x"
注意 - 根據(jù)您的環(huán)境中聲明的變量可能所有不同,所以您的輸出和這里輸出結(jié)果可能不太一樣。
ls()函數(shù)可以使用模式來匹配變量名。
# List the variables starting with the pattern "var".
print(ls(pattern = "var"))
執(zhí)行上面示例代碼,得到以下結(jié)果 -
> print(ls(pattern = "var"))
[1] "var.1" "var.2" "var.3" "var_x"
以點(.)開頭的變量是隱藏的,它們可以使用ls()函數(shù)的“all.names = TRUE”參數(shù)列出。如下所示 -
print(ls(all.names = TRUE));
執(zhí)行上面示例代碼,得到以下結(jié)果 -
> print(ls(all.names = TRUE));
[1] ".var_no" ".var1" "string" "var.1" "var.2" "var.3" "var_x"
>
可以使用rm()函數(shù)刪除變量。下面假設(shè)要刪除變量var.3。 在打印時拋出變量錯誤的值。
rm(var.3)
print(var.3)
執(zhí)行上面查詢代碼,得到以下結(jié)果 -
> rm(var.3)
> print(var.3)
Error in print(var.3) : 找不到對象'var.3'
刪除所有變量可以通過使用rm()和ls()函數(shù)一起來完成。
rm(list = ls())
print(ls())
執(zhí)行上面示例代碼,得到以下結(jié)果 -
> rm(list = ls())
> print(ls())
character(0)