news 2026/10/2 12:49:06

R语言向量语法的详细教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
R语言向量语法的详细教程

在R语言中,向量(Vector)是最基础、最核心的数据结构。R语言中的几乎所有标量(单个数字或字符)在底层都是作为长度为1的向量存在的。理解向量的运作机制,是精通R语言的关键。

以下是R语言向量语法的详细教程大全。


一、 向量的创建 (Creating Vectors)

在R中,向量是一维的,并且只能包含同一种基本数据类型。

1. 使用c()函数拼接

c()是 concatenate(连接)的缩写,是最常用的创建向量的方法。

# 创建数值型向量v_num<-c(1,2.5,4.8,10)# 创建字符型向量v_chr<-c("Apple","Banana","Cherry")# 创建逻辑型向量v_logi<-c(TRUE,FALSE,TRUE,TRUE)

2. 使用:生成连续整数序列

v_seq1<-1:10# 包含 1 到 10 的整数v_seq2<-10:1# 递减序列:10, 9, 8... 1v_seq3<-2.5:8.5# 生成 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5

3. 使用seq()函数生成等差数列

seq()提供了比:更高的自由度。

# seq(from, to, by) - by表示步长seq(1,10,by=2)# 返回: 1 3 5 7 9# seq(from, to, length.out) - 指定生成的元素总个数seq(0,1,length.out=5)# 返回: 0.00 0.25 0.50 0.75 1.00

4. 使用rep()函数生成重复序列

# rep(x, times) - 整体重复rep(c(1,2),times=3)# 返回: 1 2 1 2 1 2# rep(x, each) - 逐个元素重复rep(c(1,2),each=3)# 返回: 1 1 1 2 2 2# 结合使用rep(c("A","B"),each=2,times=2)# 返回: "A" "A" "B" "B" "A" "A" "B" "B"

二、 向量的数据类型与强制转换

向量要求所有元素类型一致。如果用c()拼接不同类型的元素,R会自动进行隐式强制类型转换(Coercion)。

1. 隐式转换规则

转换优先级(从低到高,低优先级会被转换为高优先级):
逻辑型 (Logical) -> 整型 (Integer) -> 数值型 (Numeric) -> 字符型 (Character)

c(TRUE,10)# TRUE 被转为 1,结果为数值型向量: 1 10c(3.14,"R")# 3.14 被转为字符,结果为字符型向量: "3.14" "R"c(FALSE,2L,"A")# 全部转为字符型: "FALSE" "2" "A"

2. 显式类型转换

你可以使用as.*()族函数强制改变向量的类型。

x<-c("12.5","8","99")as.numeric(x)# 转为数值: 12.5 8.0 99.0y<-c(0,1,-5)as.logical(y)# 0转为FALSE,所有非0值转为TRUE: FALSE TRUE TRUE

三、 为向量元素命名

你可以为向量的每一个元素指定一个名称,这在数据提取时非常有用。

# 方法1:创建时直接命名scores<-c(Math=90,English=85,History=88)# 方法2:使用 names() 函数后期命名ages<-c(25,30,22)names(ages)<-c("Alice","Bob","Charlie")# 查看向量的名称names(scores)# 返回: "Math" "English" "History"# 清除命名names(ages)<-NULL

四、 向量的索引与提取 (Subsetting)

注意:R语言的索引是从 1 开始的,不是 0。使用方括号[]进行索引提取。

1. 正整数索引(提取)

v<-c(10,20,30,40,50)v[1]# 提取第1个元素: 10v[c(1,3,5)]# 提取第1, 3, 5个元素: 10 30 50v[2:4]# 提取第2到第4个元素: 20 30 40

2. 负整数索引(剔除)

v[-1]# 提取除了第1个元素之外的所有元素: 20 30 40 50v[c(-1,-5)]# 剔除第1和第5个元素: 20 30 40# 注意:不能在同一个中括号里混用正整数和负整数(例如 v[c(1, -2)] 会报错)。

3. 名称索引

如果向量有名称,可以直接按名称提取。

scores<-c(Math=90,English=85,History=88)scores["English"]# 返回 85scores[c("Math","History")]# 返回 90 88

4. 逻辑向量索引(极其重要)

根据条件筛选元素是R语言数据清洗的核心技巧。

v<-c(15,8,22,5,30)# 返回一个逻辑向量: TRUE FALSE TRUE FALSE TRUEv>10# 将逻辑向量放入中括号,R会提取对应位置为 TRUE 的元素v[v>10]# 筛选出大于10的元素: 15 22 30# 复合条件 (与 &,或 |)v[v>10&v<25]# 筛选出大于10且小于25的元素: 15 22

五、 向量化运算与循环补齐 (Recycling Rule)

R语言针对向量运算进行了深度优化,你不需要写for循环就可以对所有元素进行计算。

1. 向量与标量的运算

v<-c(1,2,3,4)v*10# 每一个元素都乘以10: 10 20 30 40v+5# 每一个元素都加5: 6 7 8 9

2. 向量与向量的运算(长度相同)

v1<-c(1,2,3)v2<-c(10,20,30)v1+v2# 对应位置元素相加: 11 22 33

3. 循环补齐规则 (Recycling)

当两个不同长度的向量进行运算时,较短的向量会被重复使用(循环),直到与较长的向量长度一致。

v_long<-c(1,2,3,4,5,6)v_short<-c(10,100)v_long+v_short# v_short 会被隐式补齐为: c(10, 100, 10, 100, 10, 100)# 结果为: 11 102 13 104 15 106

注:如果长向量的长度不是短向量长度的整数倍,R会执行运算,但会弹出一个警告信息 (Warning message)。


六、 常用向量操作函数族

1. 基础信息查询

  • length(v):返回向量的长度(元素个数)。
  • class(v):返回向量的数据类型。
  • typeof(v):返回更底层的类型(如把 numeric 分为 double 和 integer)。

2. 统计与数学计算

  • sum(v):求和。
  • mean(v):求平均值。
  • max(v),min(v):求最大、最小值。
  • sd(v),var(v):求标准差、方差。
  • summary(v):提供最小值、四分位数、均值、最大值的综合统计摘要。

3. 排序与顺序

  • sort(v):对向量的值进行排序(默认升序,降序用sort(v, decreasing = TRUE))。
  • order(v):返回向量排序后的索引值(非常常用于数据框按某列排序)。
  • rev(v):将向量元素首尾反转。

4. 元素查找与去重

  • unique(v):去除重复元素,返回唯一值。
  • table(v):进行频数统计,返回每个不同元素出现的次数。
  • which(v > 10):返回满足条件的元素的索引位置,而不是元素本身。
  • match(v1, v2)或%in%:查找v1中的元素是否在v2中。
c("A","C")%in%c("A","B","C","D")# 返回: TRUE TRUE

七、 向量中的缺失值 (NA) 处理

在实际数据中,经常会遇到缺失值。在R中,缺失值用NA(Not Available) 表示。

1. 识别缺失值

绝对不能用v == NA来判断缺失值,因为缺失值和任何值比较的结果依然是缺失值(NA)。必须使用is.na()函数。

v<-c(1,2,NA,4,5)is.na(v)# 返回: FALSE FALSE TRUE FALSE FALSEv[!is.na(v)]# 提取所有非缺失值元素: 1 2 4 5 (这里用到了 ! 逻辑取反)

2. 计算时的na.rm参数

大多数统计函数如果遇到向量包含NA,默认会直接返回NA。为了跳过缺失值进行计算,需要添加参数na.rm = TRUE。

v<-c(10,20,NA,30)sum(v)# 返回: NAsum(v,na.rm=TRUE)# 忽略NA,返回: 60
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 12:47:28

MoveIt2

1,概述专门用来适配ROS2的机器人机械手或机械臂的运动规划软件框架&#xff0c;功能包括&#xff1a;运动规划&#xff08;生成可顺利通过杂乱环境的高自由度轨迹&#xff09;&#xff1b;机械臂操纵&#xff08;通过抓取生成对机器人环境进行分析&#xff0c;并与环境进行交互…

作者头像 李华
网站建设 2026/10/2 12:46:22

想拓展高性价比杭州人脉圈?这份实用指南别错过

对于扎根杭州的创业者、中小企业家来说&#xff0c;搭建高质量人脉网络从来都不是一件靠盲目参会就能完成的事&#xff0c;很多人都遇到过参会后加了满屏微信却迟迟无法转化、想找同频伙伴却找不到合适发声场合的痛点&#xff0c;而选对适配自身需求的人脉拓展路径&#xff0c;…

作者头像 李华
网站建设 2026/10/2 12:45:49

Webpack 文件指纹面试题整理

一、什么是文件指纹&#xff1f; 核心思路&#xff08;一句话&#xff09; 文件指纹就是将资源内容映射为 Hash&#xff0c;并将 Hash 写入资源 URL&#xff0c;使内容变化产生新 URL&#xff0c;从而实现静态资源长期缓存。 资源内容 → Hash → 文件名 → 长期缓存│┌───…

作者头像 李华
网站建设 2026/10/2 12:43:53

QuickBlue:面向AI工程化的Java底座架构解析

1. QuickBlue 不是又一个“AI 中台”&#xff0c;而是一套可落地的工程化底座QuickBlue 这个名字刚出现在技术群里的时候&#xff0c;我第一反应是——又来了&#xff0c;某个厂商包装的新概念。直到我花三天时间把它的 GitHub 仓库 clone 下来、跑通 demo、翻完全部 starter 源…

作者头像 李华
网站建设 2026/10/2 12:43:36

瑞芯微工业方案内存选型:为什么消费级内存一到高温就掉链子?

做工业级产品的硬件工程师&#xff0c;大概率都踩过这个坑&#xff1a;开发板上跑消费级内存&#xff0c;常温下怎么测都没问题&#xff0c;memtester跑一夜也不出错。结果产品到了客户现场&#xff0c;夏天机柜里温度一高&#xff0c;就开始随机死机、数据错乱、重启后又好。查…

作者头像 李华