Learn in 10 minutes

Learn in 10 minutes

10分钟学会R语言

R是一种功能强大的编程语言和环境,专门用于统计计算、数据分析和可视化。本教程将带你快速入门R语言编程。

1. R语言入门

让我们从一个简单的程序开始。打开R或RStudio,输入以下代码:

print("Hello, World!")

你也可以在R控制台中运行这段代码。输出结果将是:

[1] "Hello, World!"

这个简单的程序展示了R的基本输出功能。print()函数用于在控制台中显示文本信息。

2. 基本语法和变量

R的语法专为统计计算和数据分析而设计。让我们来了解基本的变量赋值和操作。

# 这是一个注释
x <- 5  # 使用 <- 操作符赋值
y = 10   # 使用 = 操作符赋值(较少使用)
print(x + y)

R的基本语法规则:

  • 赋值:使用 <- 进行变量赋值(推荐)或 =
  • 注释:单行注释以 # 开头
  • 函数:使用括号 () 调用函数
  • 向量化:R是向量化的 - 操作对整个向量起作用

3. 数据类型和结构

R有多种基本数据类型和结构用于统计计算。

3.1 基本数据类型

# 数值型(双精度)
num <- 3.14
print(class(num))

# 整型
int <- 42L
print(class(int))

# 字符型(字符串)
text <- "Hello R"
print(class(text))

# 逻辑型(布尔值)
flag <- TRUE
print(class(flag))

3.2 向量

向量是R中的基本数据结构。它们是一维数组,可以存储数值、字符或逻辑数据。

# 创建向量
numeric_vector <- c(1, 2, 3, 4, 5)
character_vector <- c("apple", "banana", "cherry")
logical_vector <- c(TRUE, FALSE, TRUE)

# 向量操作
print(numeric_vector * 2)  # 每个元素乘以2
print(numeric_vector + 1)  # 每个元素加1
print(length(numeric_vector))  # 获取向量长度

3.3 列表

列表是灵活的容器,可以存储不同类型的元素。

# 创建列表
my_list <- list(
  name = "John",
  age = 30,
  scores = c(85, 92, 78),
  active = TRUE
)

# 访问列表元素
print(my_list$name)
print(my_list[["age"]])
print(my_list[[3]])

3.4 数据框

数据框是R中数据分析最重要的数据结构。它们类似于带有行和列的表。

# 创建数据框
df <- data.frame(
  name = c("Alice", "Bob", "Charlie"),
  age = c(25, 30, 35),
  score = c(88, 92, 85)
)

# 查看数据框
print(df)
print(str(df))  # 数据框结构
print(summary(df))  # 汇总统计

4. 基本操作

R提供了丰富的数学和逻辑操作符。

# 算术运算
a <- 10
b <- 3

print(a + b)  # 加法
print(a - b)  # 减法
print(a * b)  # 乘法
print(a / b)  # 除法
print(a ^ b)  # 幂运算
print(a %% b) # 取模
print(a %/% b) # 整数除法

# 比较运算
print(a > b)   # 大于
print(a == b)  # 等于
print(a != b)  # 不等于
print(a <= b)  # 小于等于

# 逻辑运算
print(TRUE & FALSE)  # 与
print(TRUE | FALSE)  # 或
print(!TRUE)         # 非

5. 控制结构

R提供了标准的控制结构来控制程序流程。

5.1 if语句

age <- 20

if (age >= 18) {
  print("成年人")
} else if (age >= 13) {
  print("青少年")
} else {
  print("儿童")
}

5.2 for循环

# 遍历向量
fruits <- c("apple", "banana", "cherry")
for (fruit in fruits) {
  print(fruit)
}

# 使用序列
for (i in 1:5) {
  print(paste("数字:", i))
}

5.3 while循环

count <- 1
while (count <= 5) {
  print(count)
  count <- count + 1
}

6. 函数

R中的函数是用于特定任务的可重用代码块。

# 基本函数定义
calculate_area <- function(length, width) {
  area <- length * width
  return(area)
}

# 调用函数
result <- calculate_area(5, 3)
print(result)

# 带默认参数的函数
greet <- function(name = "Guest") {
  return(paste("Hello,", name))
}

print(greet("Alice"))
print(greet())  # 使用默认参数

7. 数据操作

R在数据操作方面表现出色。让我们探索一些基本操作。

# 示例数据框
students <- data.frame(
  name = c("Alice", "Bob", "Charlie", "Diana"),
  math_score = c(85, 92, 78, 95),
  science_score = c(88, 90, 82, 96),
  grade = c("A", "A", "B", "A")
)

# 数据子集
print(students[students$math_score > 85, ])  # 数学成绩大于85的行
print(students[, c("name", "math_score")])   # 特定列

# 添加新列
students$total_score <- students$math_score + students$science_score
students$average_score <- students$total_score / 2

print(students)

8. 数据可视化

R具有强大的可视化能力,特别是使用ggplot2时。

# 基本绘图(基础R)
# 创建一些示例数据
x <- 1:10
y <- x^2

# 散点图
plot(x, y, main = "散点图", xlab = "X", ylab = "Y", col = "blue", pch = 16)

# 线图
plot(x, y, type = "l", main = "线图", xlab = "X", ylab = "Y", col = "red")

# 直方图
hist(rnorm(100), main = "直方图", xlab = "值", col = "lightblue")

8.1 使用ggplot2(如果已安装)

# 如果尚未安装,安装并加载ggplot2
# install.packages("ggplot2")
library(ggplot2)

# 创建示例数据框
plot_data <- data.frame(
  category = c("A", "B", "C", "D"),
  value = c(25, 40, 30, 35)
)

# 创建柱状图
ggplot(plot_data, aes(x = category, y = value)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "柱状图示例", x = "类别", y = "值") +
  theme_minimal()

9. 统计分析

R专为统计计算而设计。以下是一些基本的统计函数。

# 示例数据
data <- c(23, 45, 67, 34, 56, 78, 89, 12, 45, 67)

# 基本统计量
print(mean(data))     # 均值
print(median(data))   # 中位数
print(sd(data))       # 标准差
print(var(data))      # 方差
print(min(data))      # 最小值
print(max(data))      # 最大值
print(summary(data))  # 五数概括

# 相关性
x <- 1:10
y <- x + rnorm(10)  # 添加一些噪声
print(cor(x, y))    # 相关系数

# 线性回归
model <- lm(y ~ x)
print(summary(model))

10. 文件操作

R提供了读写文件的函数。

# 写入文件
write.csv(students, "students.csv", row.names = FALSE)

# 从文件读取
# read_data <- read.csv("students.csv")
# print(read_data)

# 处理文本文件
# writeLines(c("第一行", "第二行", "第三行"), "example.txt")
# text_content <- readLines("example.txt")
# print(text_content)

11. 包和库

R的强大之处在于其丰富的包生态系统。

# 安装包
# install.packages("dplyr")  # 用于数据操作
# install.packages("ggplot2") # 用于可视化

# 加载包
library(dplyr)
library(ggplot2)

# 使用dplyr进行数据操作
# students %>%
#   filter(math_score > 85) %>%
#   select(name, math_score) %>%
#   arrange(desc(math_score))

12. 错误处理

R提供了错误处理机制。

# 基本错误处理
tryCatch({
  result <- 10 / 0
  print(result)
}, error = function(e) {
  print(paste("发生错误:", e$message))
}, finally = {
  print("这部分总是执行")
})

# 使用try()
result <- try(10 / 0, silent = TRUE)
if (inherits(result, "try-error")) {
  print("除法失败")
}

13. 高级主题

13.1 Apply系列函数

Apply系列函数对于向量化操作非常强大。

# 创建矩阵
mat <- matrix(1:12, nrow = 3, ncol = 4)
print(mat)

# 应用函数
print(apply(mat, 1, mean))  # 行均值
print(apply(mat, 2, sum))   # 列总和

# 对列表使用lapply
my_list <- list(a = 1:5, b = 6:10, c = 11:15)
print(lapply(my_list, mean))  # 每个列表元素的均值

# sapply(简化版本)
print(sapply(my_list, mean))

13.2 字符串操作

text <- "Hello R Programming"

print(toupper(text))    # 转换为大写
print(tolower(text))    # 转换为小写
print(nchar(text))      # 字符计数
print(substr(text, 1, 5))  # 提取子字符串

# 使用stringr包(如果已安装)
# library(stringr)
# str_split(text, " ")  # 分割字符串

13.3 日期和时间

# 当前日期和时间
current_time <- Sys.time()
print(current_time)

# 格式化日期
formatted_date <- format(current_time, "%Y-%m-%d")
print(formatted_date)

# 日期运算
today <- Sys.Date()
future_date <- today + 30
print(future_date)

14. 最佳实践

以下是一些编写更好R代码的建议:

  • 使用有意义的变量名
  • 适当注释你的代码
  • 尽可能使用向量化操作而不是循环
  • 在脚本开头加载包
  • 使用一致的缩进(推荐2个空格)
  • 使用示例数据测试代码
  • 为项目使用版本控制

15. 下一步

要继续学习R:

  1. 实践:完成小型数据分析项目
  2. 探索包:学习dplyr、ggplot2、tidyr和其他重要包
  3. 在线资源:使用R文档、Stack Overflow和R-bloggers
  4. 书籍:Hadley Wickham的《R数据科学》
  5. 课程:参加使用R进行数据分析的在线课程

R是统计计算和数据分析的强大工具。通过实践,你将能够执行复杂的数据操作、创建精美的可视化图表并进行复杂的统计分析。