创建几个基本的变量。

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 的类是 matrixarray;数组 a 的类是 array

class(v)
## [1] "integer"
class(m)
## [1] "matrix" "array"
class(a)
## [1] "array"

变量的内存性能

在 R 语言中,lobstr 包是一个用于分析和可视化 R 对象的包。该包提供了一些有用的函数,可以帮助你更深入地了解 R 中的对象的结构、内存使用和其他相关信息。

library(lobstr)

以下是一些 lobstr 包的主要功能:

  1. obj_addr() 函数: 返回对象在内存中的地址。
library(lobstr)

x <- c(1, 2, 3)
obj_addr(x)
## [1] "0x120c30ff8"
  1. obj_size() 函数: 返回对象在内存中占用的空间大小。
y <- data.frame(A = 1:5, B = letters[1:5])
obj_size(y)
## 1.81 kB
  1. 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语言中,有多个函数可以用来查看变量(数据框、矩阵等)的规格,即行数和列数以及其他相关信息。以下是其中一些常用的函数:

  1. dim() 函数: 返回一个对象的维度,包括行数和列数。

    # 示例:数据框的规格
    data <- data.frame(A = 1:3, B = c("a", "b", "c"))
    dim(data)
    
    ## [1] 3 2
    
  2. nrow()ncol() 函数: 分别返回对象的行数和列数。

    # 示例:矩阵的规格
    matrix_data <- matrix(1:6, nrow = 2, ncol = 3)
    nrow(matrix_data)
    
    ## [1] 2
    
    ncol(matrix_data)
    
    ## [1] 3
    
  3. str() 函数: 显示对象的整体结构,包括规格、列名、列类型等。

    # 示例:数据框的结构
    str(data)
    
    ## 'data.frame':	3 obs. of  2 variables:
    ##  $ A: int  1 2 3
    ##  $ B: chr  "a" "b" "c"
    
  4. 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
    
  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

作者简介

重复使用

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The source code is licensed under MIT. The full source is available at https://github.com/yihui/hugo-prose.

欢迎修订

如果您发现本文里含有任何错误(包括错别字和标点符号),欢迎在本站的 GitHub 项目里提交修订意见。

引用本文

如果您使用了本文的内容,请按照以下方式引用:

Package Build (2023). R中的基础数据结构. BIO-SPRING. /post/2023/12/04/data-structure-in-r/

BibTeX citation

@misc{
  title = "R中的基础数据结构",
  author = "Package Build",
  year = "2023",
  journal = "BIO-SPRING",
  note = "/post/2023/12/04/data-structure-in-r/"
}