R - 变量
变量为我们提供了命名存储空间,程序可以对其进行操作。R 中的变量可以存储 atomic vector、atomic vector 组或多种 R 对象组合。有有效的变量名由字母、数字以及点(.)或下划线(_)字符组成。变量名以字母或不紧跟数字的点(.)开头。
| 变量名 | 有效性 | 原因 |
|---|---|---|
| var_name2. | valid | 包含字母、数字、点和下划线 |
| var_name% | Invalid | 包含字符 '%'。仅允许点(.)和下划线。 |
| 2var_name | invalid | 以数字开头 |
|
.var_name, var.name |
valid | 可以以点(.)开头,但点(.)后不能紧跟数字。 |
| .2var_name | invalid | 开头的点后紧跟数字,因此无效。 |
| _var_name | invalid | 以 _ 开头,无效 |
变量赋值
可以使用左赋值符(<-)、右赋值符(->)或等号(=)操作符为变量赋值。可以使用 print() 或 cat() 函数打印变量的值。cat() 函数将多个项目组合成连续的打印输出。
# 使用等号操作符赋值。
var.1 = c(0,1,2,3)
# 使用左赋值符赋值。
var.2 <- c("learn","R")
# 使用右赋值符赋值。
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")
执行上述代码时,会产生以下结果 −
[1] 0 1 2 3 var.1 is 0 1 2 3 var.2 is learn R var.3 is 1 1
注意 − 向量 c(TRUE,1) 混合了 logical 和 numeric class。因此 logical class 被强制转换为 numeric class,使得 TRUE 变为 1。
变量的数据类型
在 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")
执行上述代码时,会产生以下结果 −
The class of var_x is character
Now the class of var_x is numeric
Next the class of var_x becomes integer
查找变量
要了解当前工作空间中所有可用的变量,我们使用 ls() 函数。此外,ls() 函数可以使用模式匹配变量名。
print(ls())
执行上述代码时,会产生以下结果 −
[1] "my var" "my_new_var" "my_var" "var.1" [5] "var.2" "var.3" "var.name" "var_name2." [9] "var_x" "varname"
注意 − 这是示例输出,取决于您的环境中声明的变量。
ls() 函数可以使用模式匹配变量名。
# 列出以模式 "var" 开头的变量。 print(ls(pattern = "var"))
执行上述代码时,会产生以下结果 −
[1] "my var" "my_new_var" "my_var" "var.1" [5] "var.2" "var.3" "var.name" "var_name2." [9] "var_x" "varname"
以 点(.) 开头的变量是隐藏的,可以使用 ls() 函数的 "all.names = TRUE" 参数列出它们。
print(ls(all.name = TRUE))
执行上述代码时,会产生以下结果 −
[1] ".cars" ".Random.seed" ".var_name" ".varname" ".varname2" [6] "my var" "my_new_var" "my_var" "var.1" "var.2" [11]"var.3" "var.name" "var_name2." "var_x"
删除变量
可以使用 rm() 函数删除变量。下面我们删除变量 var.3。在打印变量的值时会抛出错误。
rm(var.3) print(var.3)
执行上述代码时,会产生以下结果 −
[1] "var.3" Error in print(var.3) : object 'var.3' not found
可以使用 rm() 和 ls() 函数一起删除所有变量。
rm(list = ls()) print(ls())
执行上述代码时,会产生以下结果 −
character(0)