创建几个基本的变量。
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] 2
ncol(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