R语言基础语法入门

一、 基础操作与概念

1. 赋值与输出

在R语言中,最标准的赋值符号是左箭头 <-。虽然等号 = 也可以使用,但在R社区中 <- 是更为推荐的代码规范。

r 复制代码
# 1. 赋值
x <- 10        # 将10赋值给变量x (推荐)
y = 20         # 使用等号赋值 (合法但不推荐)
30 -> z        # 右箭头赋值 (较少使用)

# 2. 输出
print(x)       # 使用print()函数输出
x              # 直接输入变量名按回车即可输出
cat("x的值是:", x, "\n") # cat()用于拼接字符串和变量输出,\n为换行符

2. 注释

R语言只支持单行注释,使用 # 符号。如果需要多行注释,需要在每一行前面加上 #。

r 复制代码
# 这是一个单行注释
x <- 5 # 这也是注释

二、 基本数据类型 (Data Types)

R语言中常用的基本数据类型有五种。可以使用 class() 或 typeof() 函数来查看变量的数据类型。

  1. Numeric (数值型):默认的数字类型,包含小数。
  2. Integer (整型) :表示整数,需要在数字后加字母 L 声明。
  3. Character (字符型) :文本字符串,用双引号 "" 或单引号 '' 括起来。
  4. Logical (逻辑型) :布尔值,只有 TRUE (或 T) 和 FALSE (或 F)。
  5. Complex (复数型):包含实部和虚部。
r 复制代码
num <- 10.5          # class: numeric
int <- 10L           # class: integer
chr <- "Hello R"     # class: character
logi <- TRUE         # class: logical
comp <- 3 + 2i       # class: complex

# 类型转换函数
as.numeric("123")    # 字符转数值
as.character(123)    # 数值转字符
as.logical(1)        # 数值转逻辑值 (0为FALSE,非0为TRUE)

三、 运算符

1. 算术运算符

  • + (加), - (减), * (乘), / (除)
  • ^ 或 ** (指数/求幂)
  • %% (求余数/模)
  • %/% (整除)
r 复制代码
10 %% 3   # 返回 1 (10除以3的余数)
10 %/% 3  # 返回 3 (10除以3的整数部分)

2. 关系运算符

返回值均为逻辑型 (TRUE 或 FALSE)。

  • >, <, >=, <=, == (等于), != (不等于)

3. 逻辑运算符

  • & (元素级逻辑与):用于向量,逐个元素比较。
  • && (标量逻辑与):只比较向量的第一个元素,常用于 if 语句。
  • | (元素级逻辑或)。
  • || (标量逻辑或)。
  • ! (逻辑非/取反)。

四、 核心数据结构

这是R语言最核心的部分,主要分为六大数据结构。R语言的索引从 1 开始,而不是 0。

1. 向量 (Vector)

一维数组,只能包含同一种 数据类型。使用 c() 函数(concatenate)创建。

r 复制代码
# 创建向量
vec_num <- c(1, 2, 3, 4, 5)
vec_chr <- c("A", "B", "C")
vec_seq <- 1:10            # 快速生成1到10的整数序列
vec_seq2 <- seq(1, 10, by=2) # 生成1, 3, 5, 7, 9

# 向量索引
vec_num[1]         # 提取第1个元素,返回 1
vec_num[c(1, 3)]   # 提取第1和第3个元素
vec_num[-1]        # 提取除了第1个元素之外的所有元素

# 向量化运算 (R语言的强项)
vec_num * 2        # 所有元素均乘以2,返回 2, 4, 6, 8, 10

2. 矩阵 (Matrix)

二维数组,只能包含同一种数据类型。

r 复制代码
# 创建一个 2行 3列 的矩阵,按列填充 (默认)
mat <- matrix(1:6, nrow = 2, ncol = 3)
# 创建矩阵,按行填充
mat_byrow <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE)

# 矩阵索引 mat[行, 列]
mat[1, 2]   # 提取第1行,第2列的元素
mat[1, ]    # 提取整个第1行
mat[, 2]    # 提取整个第2列

3. 数组 (Array)

多维数据结构,只能包含同一种数据类型。

r 复制代码
# 创建一个 2×3×2 的三维数组
arr <- array(1:12, dim = c(2, 3, 2))
arr[1, 2, 1] # 提取第1维度的第1行第2列

4. 列表 (List)

一维集合,可以包含不同类型的数据(甚至可以包含向量、矩阵、函数或其他列表)。

r 复制代码
# 创建列表
my_list <- list(name = "Tom", age = 25, scores = c(90, 85, 88))

# 列表索引
my_list[1]       # 返回一个子列表 (class仍为list)
my_list[[1]]     # 返回列表第一个元素本身的值 ("Tom")
my_list$name     # 使用 $ 符号通过名称提取元素 (最常用)

5. 数据框 (Data Frame)

二维表格数据,类似于Excel表格。每一列可以是不同的数据类型,但每一列的长度必须相同。这是R中处理数据的最常用结构。

r 复制代码
# 创建数据框
df <- data.frame(
  ID = c(1, 2, 3),
  Name = c("Alice", "Bob", "Charlie"),
  Passed = c(TRUE, FALSE, TRUE)
)

# 数据框提取
df$Name          # 提取Name列 (返回向量)
df[1, ]          # 提取第1行所有数据
df[, "Passed"]   # 提取Passed列
df[df$ID > 1, ]  # 条件筛选:提取ID大于1的行

6. 因子 (Factor)

用于存储分类数据(Categorical data),分为名义型(无序)和有序型。

r 复制代码
# 创建因子
gender <- factor(c("Male", "Female", "Male", "Female"))
levels(gender) # 查看因子的水平 (类别): "Female" "Male"

# 有序因子
sizes <- factor(c("Small", "Large", "Medium"), 
                levels = c("Small", "Medium", "Large"), 
                ordered = TRUE)

五、 控制流语句 (Control Flow)

1. 条件判断 (if...else)

r 复制代码
x <- 10
if (x > 0) {
  print("正数")
} else if (x < 0) {
  print("负数")
} else {
  print("零")
}

**向量化条件函数:ifelse()**

非常适合对整个向量进行快速条件判断。

r 复制代码
# ifelse(条件, 满足条件时的返回值, 不满足时的返回值)
scores <- c(55, 75, 90)
results <- ifelse(scores >= 60, "Pass", "Fail")
# 返回: "Fail" "Pass" "Pass"

2. 循环语句 (Loops)

for 循环 (最常用)

r 复制代码
for (i in 1:5) {
  print(i^2)
}

while 循环

r 复制代码
count <- 1
while (count <= 3) {
  print(count)
  count <- count + 1
}

控制循环的关键字

  • break:立即跳出整个循环。
  • next:跳过当前这一轮循环的剩余代码,直接进入下一轮 (相当于其他语言的 continue)。

六、 函数 (Functions)

除了R语言自带的丰富函数,用户也可以自定义函数。使用 function 关键字定义。

r 复制代码
# 定义一个计算圆面积的函数
calculate_area <- function(radius) {
  if (radius < 0) {
    return("半径不能为负数") # 使用 return() 显式返回值
  }
  area <- pi * radius^2
  area # 如果没有 return(),函数会自动返回最后一行表达式的结果
}

# 调用函数
calculate_area(5)

设置默认参数:

r 复制代码
power <- function(base, exp = 2) {  # exp 默认为 2
  return(base^exp)
}
power(3)     # 返回 9
power(3, 3)  # 返回 27

七、 常用内置基础函数速查

  • 数学统计:

  • sum(x), mean(x), median(x), sd(x), var(x): 求和、均值、中位数、标准差、方差。

  • max(x), min(x), range(x): 最大值、最小值、范围。

  • abs(x), round(x, digits=2): 绝对值、保留两位小数。

  • 数据属性查看:

  • length(x): 向量/列表的长度。

  • dim(x): 矩阵/数据框的维度 (行数和列数)。

  • nrow(x), ncol(x): 行数、列数。

  • str(x): 查看数据对象的内部结构 (非常实用)。

  • summary(x): 输出对象的统计摘要。

  • 其他工具:

  • is.na(x): 判断数据中是否存在缺失值 (NA)。

  • na.omit(x): 移除含有缺失值的行。

  • help(函数名) 或 ?函数名: 查看某个函数的官方帮助文档。

相关推荐
想吃火锅10051 小时前
【leetcode】189.轮转数组js
开发语言·javascript·leetcode
郝学胜-神的一滴1 小时前
AI 编程智能体 02:AI智能体到底是什么
开发语言·人工智能·python·程序人生·pycharm
念何架构之路1 小时前
go-grpc服务端调用
开发语言·后端·golang
小小、码农1 小时前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
弹简特2 小时前
【Java项目-企悦抽】13-奖品管理模块-奖品列表和创建奖品的实现
java·开发语言·网络·springboot
Rosanci2 小时前
从零到合入主线:我的 DeepSeek Harness 开源贡献实战手记
开发语言·前端·开源
弹简特2 小时前
【Java项目-企悦抽】14-活动管理模块01-创建活动的实现
java·开发语言·springboot
迅猛龙办公室2 小时前
Python实现求两个数字之和
java·开发语言·python
茉莉玫瑰花茶2 小时前
OpenGL [ 纹理 ]
开发语言·c++·opengl