4  R 编程常见问题、开发习惯与 AI 辅助编程

4.1 本章学习目标(🔫️)

学习模块 主要内容 学习重点 学习难点
R 编程基础 常见语法问题与编程习惯 理解 R 的基本语法规则 避免符号与大小写错误
变量与赋值 变量概念与赋值方式 理解变量是对象的名称 <-= 的区别
RStudio 环境 RStudio 工作界面与快捷操作 熟悉基本工作流程 理解各窗口之间的关系
工作路径与项目 工作路径与 Project 的使用 使用相对路径管理数据 建立规范项目结构
AI 辅助编程 AI 在 R 编程中的辅助作用 合理使用 AI 提高效率 判断与验证 AI 生成代码

4.2 R 编程中最常见的问题

R 初学者最容易出现的问题通常不是统计方法,而是一些基础编程习惯问题。

4.2.1 中文符号问题

在 R 中必须使用 英文符号,否则会导致语法错误。

常见错误包括:

  • 中文括号 ()
  • 中文逗号
  • 中文引号 “ ”

正确示例:

Code
mean(c(1,2,3))
[1] 2

错误示例(中文符号):

mean(c(1,2,3))

4.2.2 R 区分大小写

R 是 大小写敏感语言

例如:

Code
mean(1:10)
[1] 5.5

Mean(1:10)

含义不同,第二个会报错。


4.2.3 变量必须先创建

R 按顺序执行代码,因此变量必须先创建。

Code
x <- 10
x + 5
[1] 15

如果直接运行:

x + 5

会产生错误,因为对象 x 尚未创建。


4.2.4 示例:简单统计分析

Code
attach(mtcars)

lm.fit <- aov(mpg ~ factor(cyl))
summary(lm.fit)
            Df Sum Sq Mean Sq F value   Pr(>F)    
factor(cyl)  2  824.8   412.4    39.7 4.98e-09 ***
Residuals   29  301.3    10.4                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
detach(mtcars)

注意:

attach() 在现代 R 编程中已不推荐使用,建议使用 data= 参数。

推荐写法:

Code
lm.fit <- aov(mpg ~ factor(cyl), data = mtcars)
summary(lm.fit)
            Df Sum Sq Mean Sq F value   Pr(>F)    
factor(cyl)  2  824.8   412.4    39.7 4.98e-09 ***
Residuals   29  301.3    10.4                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4.3 熟悉赋值符号

R 中最常见的赋值符号是:

<-

例如:

Code
lmfit <- lm(mpg ~ wt, data = mtcars)
lmfit

Call:
lm(formula = mpg ~ wt, data = mtcars)

Coefficients:
(Intercept)           wt  
     37.285       -5.344  

虽然 = 也可以赋值,但在 R 编程规范中,通常推荐使用 <-<- 是 R 语言传统的赋值符号,来源于早期的 S 语言。

变量名(对象名) <- 值(对象)

即“把右边的值赋给左边的对象”。在 R 中,<- 会被解释器识别为 赋值运算符(assignment operator)

当 R 解析表达式时,会按照“从右向左”的顺序执行赋值操作。

例如:

Code
x <- 3

执行过程可以理解为:

  1. 创建对象 x
  2. 将值 3 存入对象 x
  3. 返回赋值结果

因此,赋值语句在 R 中本身也是一个表达式。

= 最初并不是用于对象赋值,而是用于 函数参数传递。

参数名 = 参数值

4.4 变量(Variable)

在 R 语言中,变量(variable)是一个用于存储数据或对象的名称。
变量本质上是一个对象(object)的标识符,通过变量名可以访问和操作存储在内存中的数据。变量只是一个名字标签,用来指向数据或引用数据。

简单来说:

变量 = 数据的名字

当我们创建变量时,R 会在内存中存储数据,并用变量名指向该数据。


4.4.1 创建变量

在 R 中,变量通常通过赋值运算符 <- 创建。

例如:

Code
x <- 10

这条语句的含义是:

  1. 在内存中创建一个对象
  2. 将数值 10 存储在该对象中
  3. 用变量名 x 指向这个对象

此时,变量 x 就代表数值 10

我们可以查看变量:

Code
x
[1] 10

4.4.2 变量可以存储不同类型的数据

变量不仅可以存储数字,还可以存储多种类型的数据。

4.4.2.1 数值变量

Code
a <- 5

4.4.2.2 字符变量

Code
name <- "R language"

4.4.2.3 向量变量

Code
v <- c(1, 2, 3, 4, 5)

4.4.2.4 数据框变量

Code
df <- data.frame(x = 1:3, y = c("A", "B", "C"))

因此,在 R 中变量实际上是对象的名称


4.4.3 变量存储在内存中

当变量被创建时,数据会存储在 R 会话(session)的内存中

例如:

Code
x <- 100

此时:

  • 数据 100 被存入内存
  • 变量 x 指向该数据

可以在 RStudio 的 Environment 面板 中看到变量 x

  • 创建一个包含 100 万个数字的巨大向量
Code
big_data <- 1:1000000
  • 查看它的大小
Code
size <- object.size(big_data)
print(size)
4000048 bytes
  • 以更直观的方式显示 (MB)
Code
format(size, units = "MB")
[1] "3.8 Mb"

4.4.4 覆盖变量

变量的值可以被重新赋值。

例如:

Code
x <- 10
x <- 20

第二条语句会覆盖原来的值。

最终:

Code
x
[1] 20

结果为:

20

4.4.5 变量命名规则

变量名称可以包含:

  • 字母
  • 数字
  • 下划线 _

但不能使用保留关键字。

例如:

Code
##_abc <- 1

某些关键字不能直接作为变量名,例如:

if <- 10

如果必须使用,可以加反引号:

`if` <- 10

但不建议这样做。


4.5 RStudio 的功能和优势

RStudio 是最常用的 R 开发环境。

主要优势包括:

4.5.1 四个工作区域

RStudio 默认包含四个区域:

  1. Source(代码编辑区)
  2. Console(代码执行区)
  3. Environment / History
  4. Files / Plots / Packages / Help

这种布局使得代码开发、调试和结果查看非常高效。


4.5.2 自动补全

RStudio 提供强大的代码补全功能。

常用操作:

  • Tab 自动补全
  • Up / Down 选择候选项
  • Enter 接受补全
  • Esc 取消补全

示例:

输入:

mea

Tab 可自动补全为:

mean()

4.5.3 代码高亮

RStudio 会自动区分:

  • 函数
  • 变量
  • 字符串
  • 注释

这可以显著提高代码可读性。


4.6 RStudio 常用快捷键

熟练掌握快捷键可以显著提高编程效率。

常见快捷键:

  • Ctrl + L 清空 Console
  • Ctrl + Enter 运行当前代码行
  • Ctrl + Shift + Enter 运行整段代码
  • Ctrl + Shift + C 注释 / 取消注释
  • Ctrl + F 查找
  • Ctrl + Shift + F 全局查找
  • Esc 中断当前运行

RStudio 中查看完整快捷键:

Tools → Keyboard Shortcuts

4.7 工作路径设置

工作路径(Working Directory)是 R 读取和保存文件的默认位置。

4.7.1 获取当前工作路径

getwd()

4.7.2 设置工作路径

setwd("C:/Users/username/Desktop")

注意:

R 使用 / 作为路径分隔符。


4.7.3 查看当前目录文件

list.files()

4.7.4 推荐方式:使用 Project

现代 R 开发推荐使用 RStudio Project

优点:

  • 自动管理工作路径
  • 保持项目结构清晰
  • 便于复现分析流程

4.8 代码编辑的良好习惯

良好的代码习惯对于科研和项目开发非常重要。

4.8.1 使用注释

使用 # 添加说明。

 #读取数据
data <- read.csv("data.csv")

4.8.2 保持代码可复现

推荐原则:

  • 所有分析写入脚本
  • 不依赖手动操作
  • 不依赖 Environment 中已有变量

4.8.3 函数必须带括号

例如:

getwd()

而不是:

getwd

4.9 R 中的 ()[]{}

在 R 语言中,()[]{} 是三种非常常见的符号,它们分别用于 函数调用、参数传递、元素提取以及代码块控制。理解它们的作用,对于编写 R 程序非常重要。


4.9.1 ():函数调用与参数

() 最常见的用途是 调用函数并传递参数

例如:

mean(c(1,2,3))

这里:

  • mean 是函数名
  • () 中放的是函数参数

因此:

() 用于 函数调用和参数传递


4.9.2 多个参数

函数通常可以有多个参数。

seq(from = 1, to = 10, by = 2)

这里:

  • fromtoby 都是函数参数
  • () 中定义了函数的输入信息

4.9.3 表达式分组

() 还可以用于改变运算顺序。

(1 + 2) * 3

如果没有括号:

1 + 2 * 3

计算顺序会不同。


4.9.4 []:元素提取(索引)

[] 用于 从对象中提取元素,也叫 索引(indexing)


4.9.5 向量索引

x <- c(10,20,30,40)

x[2]

结果:

20

表示提取第 2 个元素。


4.9.6 多个元素

x[c(1,3)]

结果:

10 30

4.9.7 矩阵索引

矩阵索引需要 行和列两个位置

A <- matrix(1:9,3,3)

A[2,3]

表示:

第2行,第3列

4.9.8 数据框索引

df <- data.frame(
  id = 1:3,
  score = c(80,90,85)
)

df[1,2]

表示:

第1行,第2列

4.9.9 {}:代码块(function block)

{} 用于表示 代码块(block),也可以理解为 一组需要连续执行的语句

例如:

{
  x <- 1
  y <- 2
  x + y
}

R 会:

  1. 依次执行代码
  2. 返回最后一条语句的结果

4.9.10 函数中的代码块

在函数定义中,{} 表示 函数体(function body)

f <- function(x){
  y <- x + 1
  y * 2
}

这里:

  • function(x) 定义函数参数
  • {} 中的代码是函数执行的内容

4.9.11 条件语句中的代码块

x <- 5

if(x > 3){
  print("x 大于 3")
}

当条件满足时,{} 中的代码会被执行。


4.9.12 循环中的代码块

for(i in 1:3){
  print(i)
}

{} 表示循环体。


符号 作用 典型场景
() 函数调用、参数传递、表达式分组 mean(x)
[] 元素提取(索引) x[2]
{} 代码块、函数体、控制结构 if(){}

简单记忆:

  • () → 函数与参数
  • [] → 取数据
  • {} → 一段代码

4.10 AI 辅助 R 编程

近年来,AI 工具已经成为 R 编程的重要辅助工具。

合理使用 AI 可以显著提高学习效率。


4.11 常见 AI 编程助手

4.11.1 ChatGPT

优势:

  • 解释代码逻辑能力强
  • 适合学习算法和统计方法
  • 代码解释非常清晰

适合用途:

  • 学习 R 编程
  • 理解统计模型
  • 生成示例代码

4.11.2 DeepSeek

DeepSeek 在代码生成方面表现非常强。

优势:

  • 编程推理能力强
  • 复杂代码生成能力好
  • 对数学和统计问题支持较好

适合用途:

  • 数据分析代码生成
  • 算法实现
  • R 与 Python 混合分析

4.11.3 通义千问(Qwen)

阿里推出的大模型,在国内使用非常稳定。

优势:

  • 中文理解能力强
  • 编程回答较稳定
  • 与国内生态兼容性好

适合用途:

  • R 代码解释
  • 数据处理脚本
  • 教学辅助

4.11.4 豆包(Doubao)

字节跳动推出的 AI 模型。

优势:

  • 响应速度快
  • 中文语义理解好
  • 对办公与数据分析支持较好

适合用途:

  • 数据处理
  • 简单 R 脚本生成
  • 数据可视化代码

4.12 AI 在 R 编程中的使用技巧

推荐使用方式:

  1. 描述清楚任务
  2. 提供数据结构示例
  3. 要求生成完整代码

示例提示词:

请用 R 语言使用 ggplot2 绘制散点图,
数据框名称为 df,
x 变量为 temperature,
y 变量为 yield,
并添加线性回归拟合线。

AI 会生成类似代码:

library(ggplot2)
 
ggplot(df, aes(temperature, yield)) +
 geom_point() +
 geom_smooth(method = "lm")

4.13 使用 AI 的注意事项

AI 可以辅助编程,但不能完全替代学习。

建议:

  • 理解代码含义
  • 检查 AI 输出结果
  • 不要直接复制未验证代码

4.14 本章小结

  • R 编程常见错误包括符号、大小写和变量顺序问题
  • RStudio 提供强大的开发环境
  • 熟练掌握快捷键可以提高效率
  • 使用 Project 管理项目结构
  • AI 工具可以显著提升学习与编程效率
  • 合理结合 AI 与自身理解是未来数据分析的重要能力

图4.1本次课程主要讲授内容