R - 数组:初学者的强大数据结构指南

你好,有抱负的R语言程序员!我很高兴能成为你在这个激动人心的R语言数组世界中的向导。作为一个教授计算机科学超过十年的人,我可以向你保证,数组就像是编程中的瑞士军刀——多功能、强大,且绝对必要掌握。那么,让我们开始吧!

R - Arrays

数组是什么?

在我们深入了解之前,让我们从基础开始。想象你有一堆书。你可以把它们堆成一堆,但这会让你很难找到特定的书。现在,想象一个有多个书架和部分的书架。这基本上就是R语言中的数组——一种结构化的存储和组织数据的方式。

在R语言中,数组是一个多维数据结构,可以存储相同类型的数据。它就像是一个矢量的高级版本,能够以多维存储数据。

示例:创建你的第一个数组

让我们创建我们的第一个数组!我们将使用array()函数来完成这个任务。

my_first_array <- array(1:24, dim = c(4, 3, 2))
print(my_first_array)

当你运行这段代码时,你会看到类似这样的输出:

, , 1

[,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

, , 2

[,1] [,2] [,3]
[1,]   13   17   21
[2,]   14   18   22
[3,]   15   19   23
[4,]   16   20   24

发生了什么?我们创建了一个三维数组!把它想象成两个4x3的矩阵堆叠在一起。dim = c(4, 3, 2)部分告诉R创建一个有4行、3列和2个“层”或矩阵的数组。

命名列和行

就像我们给书架贴上标签以便更容易找到书籍一样,我们可以给数组的维度命名。这使得我们的数据更有意义,也更容易处理。

# 创建一个带有命名维度的数组
student_scores <- array(
c(85, 90, 78, 92, 88, 76, 95, 87, 82),
dim = c(3, 3),
dimnames = list(
c("Alice", "Bob", "Charlie"),
c("Math", "Science", "English")
)
)

print(student_scores)

输出:

Math Science English
Alice    85      88      95
Bob      90      76      87
Charlie  78      92      82

现在我们的数组有了有意义的行和列名。理解Alice在数学中得了85分,在英语中得了95分要容易得多!

访问数组元素

现在我们有了数组,我们如何从中获取特定的信息呢?就像知道在书架的哪个货架和部分中查找一样。

# 访问单个元素
print(student_scores["Alice", "Math"])  # 输出:85

# 访问整行
print(student_scores["Bob", ])  # 输出:Math 90 Science 76 English 87

# 访问整列
print(student_scores[, "Science"])  # 输出:Alice 88 Bob 76 Charlie 92

操作数组元素

数组不仅用于存储数据——我们还可以改变它们!让我们更新一些分数:

# 更新单个分数
student_scores["Charlie", "English"] <- 89
print(student_scores["Charlie", "English"])  # 输出:89

# 更新整行
student_scores["Alice", ] <- c(91, 93, 97)
print(student_scores["Alice", ])  # 输出:Math 91 Science 93 English 97

对数组元素进行计算

数组最强大的功能之一是能够对其元素进行计算。让我们计算一些平均值:

# 计算每个学生的平均分数
student_averages <- apply(student_scores, 1, mean)
print(student_averages)

# 计算每门科目的平均分数
subject_averages <- apply(student_scores, 2, mean)
print(subject_averages)

apply()函数就像是数组的瑞士军刀。第二个参数(1或2)告诉R是应用到行(1)还是列(2)。

数组方法

以下是一些在R中常用的数组方法的表格:

方法 描述 示例
array() 创建数组 array(1:12, dim = c(3, 4))
dim() 获取或设置数组维度 dim(my_array)
length() 获取元素总数 length(my_array)
dimnames() 获取或设置维度名称 dimnames(my_array)
apply() 在数组边缘应用函数 apply(my_array, 2, sum)
sweep() 扫除数组摘要 sweep(my_array, 2, colMeans(my_array))

结论

恭喜你!你已经迈入了强大的R语言数组世界的第一步。我们涵盖了创建数组、命名维度、访问和操作元素,甚至跨元素进行计算。

记住,学习使用数组就像学习组织图书馆。起初,它可能看起来很复杂,但一旦你掌握了它,你会惊讶于你能多有效率地存储、访问和分析你的数据。

在你继续你的R语言之旅时,你会发现数组无处不在——从简单的数据分析到复杂的统计模型。所以继续练习,保持好奇心,不要害怕尝试。快乐编码,愿你的数组总是井井有条!

Credits: Image by storyset