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("數學", "科學", "英語")
)
)

print(student_scores)

輸出:

數學 科學 英語
Alice    85      88      95
Bob      90      76      87
Charlie  78      92      82

現在,我們的數組有了有意義的行和列名稱。這讓我們更容易理解,例如,Alice在數學上得了85分,英語上得了95分!

訪問數組元素

既然我們有了數組,我們如何從中獲取特定的信息呢?這就像知道在書櫥中的哪個書架和哪個區域查找特定的書。

# 訪問單個元素
print(student_scores["Alice", "數學"])  # 輸出:85

# 訪問整行
print(student_scores["Bob", ])  # 輸出:數學 90 科學 76 英語 87

# 訪問整列
print(student_scores[, "科學"])  # 輸出:Alice 88 Bob 76 Charlie 92

操作數組元素

數組不僅僅用於存儲數據——我們還可以改變它們!讓我們更新一些成績:

# 更新單個成績
student_scores["Charlie", "英語"] <- 89
print(student_scores["Charlie", "英語"])  # 輸出:89

# 更新整行
student_scores["Alice", ] <- c(91, 93, 97)
print(student_scores["Alice", ])  # 輸出:數學 91 科學 93 英語 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