创建几个基本的变量。
v = 1:24
m = matrix(v, nrow = 4)
a = array(v, dim = c(2,3,4))
这些变量都保存了 1 - 24 这几个数字。不过,它们所属的类是不同的。
v
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
m
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    5    9   13   17   21
## [2,]    2    6   10   14   18   22
## [3,]    3    7   11   15   19   23
## [4,]    4    8   12   16   20   24
a
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    7    9   11
## [2,]    8   10   12
## 
## , , 3
## 
##      [,1] [,2] [,3]
## [1,]   13   15   17
## [2,]   14   16   18
## 
## , , 4
## 
##      [,1] [,2] [,3]
## [1,]   19   21   23
## [2,]   20   22   24
变量的类
在R语言中,typeof() 函数用于获取一个对象的基本数据类型。它返回一个描述对象数据类型的字符串。
以下是 typeof() 函数的一些常见返回值:
- “integer”: 整数类型。
- “double”: 浮点数类型。
- “character”: 字符串类型。
- “logical”: 逻辑类型。
- “complex”: 复数类型。
- “raw”: 二进制原始数据类型。
- “list”: 列表类型。
- “NULL”: 表示空值。
这个函数在编写R代码时用于检查变量的类型,有时候在处理不同类型的数据时会很有用。需要注意的是,R是一种动态类型语言,变量的数据类型可以在运行时改变。虽然 typeof() 提供了对象的底层类型,但有时使用其他函数如 class() 或 str() 可能更有助于更全面地理解对象的结构和属性。
typeof(v)
## [1] "integer"
typeof(m)
## [1] "integer"
typeof(a)
## [1] "integer"
在R语言中,class() 函数用于获取对象的类别(class)。类别是一个用来描述对象类型的属性,它是面向对象编程中的一个概念。在R中,类别通常与S3对象系统相关联。
class() 函数返回一个描述对象类别的字符向量。对于基本数据类型,它通常返回R内置的基本类别,例如 “numeric”、“character”、“logical"等。对于更复杂的对象,它可以返回用户定义的类别。
有时,class() 和 typeof() 可能返回相似的结果,但它们的用途略有不同。typeof() 返回底层的数据类型,而 class() 返回更高级别的对象类别。例如,在处理用户定义的类时,class() 更为有用。
# 示例:用户定义的类
setClass("Person", slots = c(name = "character", age = "numeric"))
person <- new("Person", name = "Alice", age = 30)
typeof(person)  # 返回 "S4"
## [1] "S4"
class(person)  # 返回 "Person"
## [1] "Person"
## attr(,"package")
## [1] ".GlobalEnv"
在上面的示例中,typeof(person) 返回 “S4”,指示这是一个S4对象,而 class(person) 返回 “Person”,指示它是一个用户定义的 “Person” 类对象。
在这里,向量 v 的类是 integer;矩阵 m 的类是 matrix 和 array;数组 a 的类是 array。
class(v)
## [1] "integer"
class(m)
## [1] "matrix" "array"
class(a)
## [1] "array"
变量的内存性能
在 R 语言中,lobstr 包是一个用于分析和可视化 R 对象的包。该包提供了一些有用的函数,可以帮助你更深入地了解 R 中的对象的结构、内存使用和其他相关信息。
library(lobstr)
以下是一些 lobstr 包的主要功能:
- obj_addr()函数: 返回对象在内存中的地址。
library(lobstr)
x <- c(1, 2, 3)
obj_addr(x)
## [1] "0x120c30ff8"
- obj_size()函数: 返回对象在内存中占用的空间大小。
y <- data.frame(A = 1:5, B = letters[1:5])
obj_size(y)
## 1.81 kB
- ref()函数: 返回对象的引用计数。
z <- list(a = 1, b = 2, c = 3)
ref(z)
## █ [1:0x1314b1558] <named list> 
## ├─a = [2:0x15039ad60] <dbl> 
## ├─b = [3:0x15039ad98] <dbl> 
## └─c = [4:0x15039add0] <dbl>
lobstr 包的这些函数返回一些底层的、高级的或专业的信息,帮助用户了解R中对象的内部结构、内存使用情况以及引用计数等方面信息。虽然对于一般的数据分析和编程任务来说可能并不总是必要,但是对于开发者在调试、性能优化或对内存使用进行更深入分析时是非常有帮助的。
查看 3 个变量的内存地址及占用内存空间大小。
ref(v)
## [1:0x13059d690] <int>
ref(m)
## [1:0x120aec688] <int[,6]>
ref(a)
## [1:0x120b16e18] <int[,3,4]>
从占用空间大小上看,矩阵是最省的。
obj_size(v)
## 856 B
obj_size(m)
## 344 B
obj_size(a)
## 352 B
变量的规格
在R语言中,有多个函数可以用来查看变量(数据框、矩阵等)的规格,即行数和列数以及其他相关信息。以下是其中一些常用的函数:
- 
dim()函数: 返回一个对象的维度,包括行数和列数。# 示例:数据框的规格 data <- data.frame(A = 1:3, B = c("a", "b", "c")) dim(data)## [1] 3 2
- 
nrow()和ncol()函数: 分别返回对象的行数和列数。# 示例:矩阵的规格 matrix_data <- matrix(1:6, nrow = 2, ncol = 3) nrow(matrix_data)## [1] 2ncol(matrix_data)## [1] 3
- 
str()函数: 显示对象的整体结构,包括规格、列名、列类型等。# 示例:数据框的结构 str(data)## 'data.frame': 3 obs. of 2 variables: ## $ A: int 1 2 3 ## $ B: chr "a" "b" "c"
- 
summary()函数: 提供对象的统计摘要,包括最小值、最大值、中位数等。# 示例:向量的摘要 vector_data <- c(1, 2, 3, 4, 5) summary(vector_data)## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 1 2 3 3 4 5
- 
length()函数: 返回对象的长度。对于矩阵和数据框,它返回列数。# 示例:矩阵的列数 length(matrix_data)## [1] 6
这些函数提供了不同层次的信息,你可以根据需要选择使用。dim()、nrow()、ncol()、length() 主要用于矩阵和数据框,而 str() 和 summary() 适用于多种对象类型。
dim(v)
## NULL
dim(m)
## [1] 4 6
dim(a)
## [1] 2 3 4
length(v)
## [1] 24
length(m)
## [1] 24
length(a)
## [1] 24
nrow(v)
## NULL
nrow(m)
## [1] 4
nrow(a)
## [1] 2