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