学习笔记:R语言基础
文章目录
- 一、R语言简介
- 二、选择R的原因
- 三、R基本数据对象
- (一)向量
- (二)矩阵
- (三)数组
- (四)因子
- (五)列表
- (六)数据框
- (七)函数
- 四、基本函数应用示例
- 五、自定义函数
- (一)自定义函数定义
- (二)自定义函数示例
- 1、求和函数
- 2、分段函数
- 六、结束语
一、R语言简介
- R语言是一种开源的统计计算和图形制作环境,它不仅提供了全面的数据处理能力,还具备强大的数组运算工具,尤其在向量和矩阵运算上表现出色。此外,R语言内置了丰富的统计分析方法,并拥有卓越的统计图表绘制功能。更关键的是,R语言提供了一种灵活且功能强大的编程语言,使得用户能够自由地进行数据操作、输入输出控制以及自定义函数,以满足各种复杂的数据分析需求。
二、选择R的原因
- 尽管R语言在处理大数据集时性能受限,不适合直接处理大规模数据,但它作为教学与实验工具的价值不容忽视。在教学中,R语言因其清晰易懂的算法模型展示及直观的绘图功能而广受欢迎,便于学生深入理解统计学原理。当面临大数据挑战时,可通过抽样或结合Hadoop、Spark等并行计算框架来解决。此外,通过学习R语言中的数据分析方法和模型原理,用户可以快速迁移到其他大数据处理工具上,实现无缝衔接。
三、R基本数据对象
(一)向量
- R语言中的向量是一种基本且重要的数据结构,它是一维的有序元素序列,可以包含整数、实数、字符、逻辑值或复数等同类型数据。通过
c()函数创建,例如vec <- c(1, 2, 3, "a", TRUE)。向量在R中是处理和分析数据的基础,许多高级数据结构如矩阵、数组和列表都是基于向量构建的。
(二)矩阵
- 在R语言中,矩阵是一个二维数组,用于存储相同类型(如数值、字符)的数据。通过
matrix(data, nrow, ncol, byrow=FALSE, dimnames=NULL)函数创建,其中data是向量数据源,nrow和ncol定义行数和列数,byrow参数决定是否按行填充,若为TRUE则按行填充,FALSE则按列;dimnames可为矩阵添加行名和列名。矩阵支持各种数学运算,可通过索引进行元素访问和修改。
(三)数组
- 在R语言中,数组是一种多维数据结构,用于存储同一类型的数据。通过
array()函数创建,它接受一个向量作为基础数据,并通过dim参数指定各维度大小来形成更高维度的集合。例如,可以创建包含多个矩阵的三维数组,每个元素都具有相同的类型。数组是向量和矩阵的扩展,可用来处理更复杂、多层面的数据组织。
(四)因子
- 在R语言中,因子(factor)是一种特殊的数据类型,用于表示分类或有序类别数据。它将名义变量或有序变量的各个类别值编码为整数,并存储一个映射表,将这些整数对应到原始类别标签。因子是统计分析和可视化时的关键对象,能确保分类变量在模型构建、假设检验(如卡方检验)以及各类回归分析、ANOVA等过程中得到正确处理。创建因子使用
factor()函数,可自定义级别顺序和标签。
(五)列表
- R语言中的列表是一种灵活且强大的数据结构,它是一个有序的、可变长度的集合,能够容纳不同类型(如数值、字符、逻辑甚至其他数据结构如向量、矩阵、数组或数据框等)的对象。通过
list()函数创建,列表允许将多个元素聚合为单个对象,便于管理和操作多组不同性质的数据。例如,可以创建一个包含字符串、数值向量和逻辑矩阵的列表,每个成分都可以独立存取和修改。
(六)数据框
- R语言中的数据框(data frame)是一种特殊的数据结构,它将表格形式的数据组织成列向量的集合。每一列代表一个变量,可以是不同数据类型(如数值、字符或逻辑型),而每行则表示观测样本。数据框可通过
data.frame()函数构建,其各列必须具有相同长度。数据框常用于统计分析和数据可视化,类似于电子表格,且能灵活处理多元统计中异质类型的数据集。
(七)函数
- 在R语言中,函数是执行特定任务的可重复使用的代码块。用户通过定义函数名、参数列表和函数体来创建函数,函数能接收输入(参数),经过一系列计算或逻辑处理后,返回一个结果。例如,
mean()是一个内置函数,用于计算向量或数组的平均值;用户也可自定义函数,如myFunction(x, y) <- {x + y}实现两数相加的功能。函数有助于模块化编程,提高代码复用性和组织性。
四、基本函数应用示例
-
创建向量:在R中,通过
c()函数可以创建一维向量。例如,x <- c(10.4, 5.6, 3.1, 6.4, 21.7)将一系列数值组合成名为x的浮点数向量。赋值符号可以用<-或=, 这里所有元素自动转换为一致的数据类型(在这个例子中是数值型)。 -
生成序列:使用
seq()函数可以生成一系列连续数值。如seq(2, 10)默认步长为1生成2到10的整数序列;指定步长为2用seq(1, 10, by = 2);步长为0.2则为seq(1, 5, by = 0.2);从2开始,步长为3产生4个数:seq(2, 8, by = 3);在区间[-5,5]生成100个数:seq(-5, 5, length.out = 100)。 -
重复序列:
rep()用于复制向量或生成重复序列。比如rep(c(1, 2, 3), times = 3)会将整个向量重复3次;而rep(x, each = 2)会将向量x中的每个元素分别复制2次形成新序列并赋值给data。 -
拼接函数:
paste()结合多个数据项为一个字符串。如paste("Hello", "World")得到"Hello World";添加分隔符:paste(c("A", "B", "C"), collapse = ", ")结果为"A, B, C";拼接与序列结合实例:paste(seq(1, 3), "apple")生成"1 apple", “2 apple”, “3 apple”。 -
数据子集选择与修改:通过索引操作符
[]选取向量元素,如data[3:5]获取向量data第3至第5个元素;条件选择:data[data > 300 & data < 400]选出data中300至400之间的元素,并统计其数量:sum(data > 300 & data < 400)。 -
汇总函数:
summary()提供对象的基本统计信息。对于向量,输出包括最小值、四分位数、中位数、均值和最大值等。例如,summary(data)查看向量data的相关统计指标。 -
因子函数:
factor()将字符向量转化为有序或无序因子,便于分类分析。如data <- factor(c("湖南","四川","四川","湖南","贵州","湖南","贵州")),levels(data)显示因子的类别。 -
矩阵函数:
matrix()创建矩阵,如matrix(c(4,-1,2,1,1,1,0,3,0,3,1,4), nrow = 4, ncol = 3)创建一个4行3列的矩阵。访问矩阵元素如A[2, 3];创建单位矩阵:diag(n);填充特定元素矩阵示例已给出。 -
矩阵转置函数:
t()实现矩阵转置,如t(A)将矩阵A转置。 -
矩阵维数函数:
dim()返回或设置矩阵维数,如dim(A)查询矩阵A的维度,dim(A) <- c(3, 4)更改A的维度为3行4列。 -
数组函数:通过
array()和dim参数定义多维数组,例如创建三维数组需指定每维大小。 -
列合并与行合并:
cbind()按列合并矩阵,如cbind(A, B);rbind()按行合并矩阵,如rbind(A, B)。 -
列表函数:列表是一种可包含不同类型元素的数据结构。要获取列表中属性值,如
list_data$attribute_name。例如,my_list <- list(name = "Mike", age = 25); my_list$name返回"Mike"。 -
数据帧函数:
data.frame()构造数据帧,各列可以是不同模式。如df <- data.frame(name = c("John", "Jane"), age = c(30, 28))创建一个数据帧。引用数据帧元素时通常使用$符号,如df$name。attach()和detach()函数用于简化数据框变量的引用,但不推荐频繁使用以避免命名冲突等问题。例如,attach(df)后可以直接用name引用列名,结束后用detach(df)解除关联。 -
read.table()函数:
read.table()是R语言中用于读取纯文本文件并将其中数据转换为数据帧的函数。该函数要求输入文件的第一行包含变量名,后续行代表数据记录,每行按列对应各变量值。若无表头,则默认变量名为"v1", "v2"等;若有表头但无行索引,通过设置header=TRUE指明首行为列名。此外,可通过setwd()函数改变当前工作目录以便正确读取目标文件。- 创建文本文件
info.txt

- 读取,表头采用默认变量

- 读取,采用文件首行做表头

- 使用
attach()函数简化对info的数据引用

- 创建文本文件
五、自定义函数
(一)自定义函数定义
- 在R语言中,用户通过
function()关键字定义自定义函数,例如:myFunction <- function(arg1, arg2) {expression},其中arg1和arg2为输入参数,expression是基于这些参数进行计算或处理的代码块。
(二)自定义函数示例
1、求和函数

2、分段函数
f ( x ) = { x + 2 ( 1 ) x 2 ( 2 ) f(x)=\begin{cases} x+2 &(1)\\ x^2 &(2)\\ \end{cases} f(x)={x+2x2(1)(2)
- 定义函数,并绘制图像


六、结束语
- 总之,R语言作为开源统计计算和图形制作的首选工具,凭借其全面的数据处理能力、强大的数组运算以及丰富的内置统计模型和可视化功能,在全球数据分析领域占据重要地位。尽管在处理超大规模数据时面临性能挑战,但通过合理抽样或结合分布式计算框架,R语言依然能够胜任复杂的数据分析任务。从基础数据对象如向量、矩阵到更高级的数据结构如数组、因子、列表和数据框,R语言提供了一套完整且灵活的数据组织方式,满足各种类型数据的存储与操作需求。而函数的运用则大大提升了代码复用性和程序结构化程度,无论是利用内置函数进行快速统计分析,还是自定义函数解决特定问题,都彰显了R语言在实现高效数据分析流程上的优越性。掌握R语言的基本语法和核心功能,无疑将助力用户深入探索数据背后的规律,提升解决问题的能力,并在实际应用中发挥关键作用。
相关文章:
学习笔记:R语言基础
文章目录 一、R语言简介二、选择R的原因三、R基本数据对象(一)向量(二)矩阵(三)数组(四)因子(五)列表(六)数据框(七&#…...
初识智慧城市
文章目录 智慧家居 智慧社区 智慧交通 智慧医疗 智慧教育 智慧旅游 智慧农业 智慧安防 智慧家居 利用智能语音、智能交互等技术,实现用户对家居系统各设备的远程操控和能控制如开关窗帘(窗户)、操控家用电器和照明系统、打扫卫生等操作。利用计算机视觉等技术,对被照看…...
Zookeeper之手写一个分布式锁
前言 我之前写了一篇快速上手ZK的文章:https://blog.csdn.net/qq_38974073/article/details/135293106 本篇最要是进一步加深学习ZK,算是一次简单的实践,巩固学习成果。 设计一个分布式锁 对锁的基本要求 可重入:允许同一个应…...
【音视频 ffmpeg 学习】 RTMP推流 mp4文件
1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。 2.RTMP协议中基本的数据单元称为消息(Message)。 3.当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunkÿ…...
跨进程通信 macOS XPC 创建实例
一:简介 XPC 是 macOS 里苹果官方比较推荐和安全的的进程间通信机制。 集成流程简单,但是比较绕。 主要需要集成 XPC Server 这个模块,这个模块最终会被 apple 的根进程 launchd 管理和以独立进程的方法唤起和关闭, 我们主app 进…...
Python圣诞树代码
Python圣诞树代码 # 小黄 2023/12/25import turtle as t # as就是取个别名,后续调用的t都是turtle from turtle import * import random as rn 100.0speed(20) # 定义速度 pensize(5) # 画笔宽度 screensize(800, 800, bgblack) # 定义背景颜色,可…...
flask之文件管理系统-项目 JRP上线啦!!! ---修订版,兼容Windows和Linux系统
上一章的版本https://blog.csdn.net/weixin_44517278/article/details/135275066,在Windows下debug完成无异常后,上传到我的树莓下开始正式服役 由于开发环境是Windows,使用环境是Linux,导致最后没能成功运行起来 这个版本是今天去…...
希尔排序:排序算法中的调优大师
希尔排序:排序算法中的调优大师 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同探讨一个经典而高效的排序算法——希尔排序。…...
LeetCode 1185. 一周中的第几天
一、题目 1、题目描述 给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和 year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tues…...
大数据学习(30)-Spark Shuffle
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
Linux部署ELK
大家好,我是升仔 引言 在复杂的系统架构中,日志管理是一个关键的环节。ELK栈提供了一个高效的解决方案,能够帮助我们快速定位问题、分析数据,并实现实时监控。部署ELK栈是一项挑战,但收益巨大。 基础安装和配置 环境准…...
Python 实现 PDF 到 Word 文档的高效转换(DOC、DOCX)
PDF(Portable Document Format)已成为一种广泛使用的电子文档格式。PDF的主要优势是跨平台,可以在不同设备上呈现一致的外观。然而,当我们需要对文件内容进行编辑或修改,直接编辑PDF文件会非常困难,而且效果…...
【MYSQL】MYSQL 的学习教程(七)之 慢 SQL 优化思路
1. 慢 SQL 优化思路 慢查询日志记录慢 SQLexplain 分析 SQL 的执行计划profile 分析执行耗时Optimizer Trace 分析详情确定问题并采用相应的措施 1. 慢查询日志记录慢 SQL 如何定位慢SQL呢? 我们可以通过 慢查询日志 来查看慢 SQL。 ①:开启慢查询日志…...
unity学习笔记----游戏练习0
一、修复植物种植的问题 1.当手上存在植物时,再次点击卡片上的植物就会在手上添加新的植物,需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。 public bool AddPlant(PlantType plantType) { //防止手上出现多个植…...
ai概念:强人工智能介绍、迁移学习
强人工智能(Strong Artificial Intelligence,SAI)是指一种具有与人类智能相媲美或超越人类智能水平的人工智能系统。与弱人工智能(Weak Artificial Intelligence,WAI)不同,强人工智能具有更高级…...
go语言设计模式-单例模式
建造型设计模式-单例模式 是用来控制类型实例的数量的,当需要确保一个类型只有一个实例时,就需要使用单例模式。 即把实例的访问进行收口,不能谁都能 new 类,所以单例模式还会提供一个2访问该实例的全局端口,一般都会…...
超维空间S2无人机使用说明书——51、基础版——使用yolov8进行目标跟踪
引言:为了提高yolo识别的质量,提高了yolo的版本,改用yolov8进行物体识别,同时系统兼容了低版本的yolo,包括基于C的yolov3和yolov4,以及yolov7。 简介,为了提高识别速度,系统采用了G…...
Transformer(seq2seq、self-attention)学习笔记
在self-attention 基础上记录一篇Transformer学习笔记 Transformer的网络结构EncoderDecoder 模型训练与评估 Transformer的网络结构 Transformer是一种seq2seq 模型。输入一个序列,经过encoder、decoder输出结果也是一个序列,输出序列的长度由模型决定…...
2023-12-29 服务器开发-centos部署ftp
摘要: 2023-12-29 服务器开发-centos-部署ftp 部署ftp vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。 前提条件 已创建ECS实例并为实例分配了公网IP地址。 背景…...
螺旋数字阵(100%用例)C卷 (JavaPythonNode.jsC语言C++)
疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m (0 < n <= 999,0 < m <= 999) ,从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成一个m行矩阵 小明对这个矩阵有些要求 1.每行数字的个数一样多…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...
