R语言编程基础
文章目录
- 安装
- 运算符
- 判断
- 函数
- 递归
安装
根据自己的操作系统,下载R语言环境后,安装,并将安装路径加入到环境变量,即可从命令行进入R环境
>rR version 4.2.2 (2022-10-31 ucrt) -- "Innocent and Trusting"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.> q()
Save workspace image? [y/n/c]: n
>
进入之后,通过q()可以推出R语言环境,在退出之前,会提示是否保存工作镜像,y是保存,n是不保存,c是不退出。
如果并不习惯在命令行中操作,可以下载RStudio。
RStudio是转为R语言打造的集成开发环境,下载地址:RStudio,选择免费的就行,安装过程中,会自动嗅探已经安装的R语言环境,注意选择。
安装完成后,打开界面如下,整体布局为四个格子,左下角的Console选项卡为命令行,可以直接输入R语言命令;左上角为文件编辑区,既可以编辑R语言脚本,也可以展示当前工作区中的变量详情。其他的选项卡将在后面陆续介绍。

运算符
R语言中,用#做单行注释,双引号为多行注释。
尽管支持用=赋值,但在R语言中,更推荐左赋值<-和右赋值->作为赋值符,示例如下
a <- 5
6 -> b
a + b -> c
print(c)
# [1] 11
当输入这些命令后,RStudio右上角的Environment选项卡中,出现了a,b,c三个变量,其值分别位5, 6, 11。如果点进History选项卡,会看到刚刚在命令行中输入的所有命令。

在R语言中,常见的运算符和数学函数如下
| 类别 | |
|---|---|
| 算术 | 加减乘除+, -, *, /;整除%/%;求余%%;乘方^ |
| 比较 | >, <, ==, !=, >=, <= |
| 逻辑 | 与或非 &, |, ! |
| 取整函数 | 四舍五入round;向上取整ceiling;向下取整floor |
| 三角函数 | 三角sin, cos, tan;反三角asin, acos, atan |
| 指数对数 | 平方根sqrt;e指数exp;对数log;10底对数log10 |
下面实际体验一下
> round(c/b)
[1] 2
# round的第二个参数,表示保留的小数位数
> round(c/b,3)
[1] 1.833
> c %/% a
[1] 2
> c ^ a
[1] 161051
> c < a
[1] FALSE
> c > a
[1] TRUE
> FALSE | TRUE
[1] TRUE
其中,FALSE和TRUE为布尔型返回值,分别表示假和真。
判断
布尔型的一个重要作用,就是作为判断语句的条件。在R语言中,提供了宇宙通用的if...else if...else语句,示例如下
> if(a>b){
+ print(a)
+ }else if(a==b){
+ print("a==b")
+ }else{
+ print(b)
+ }
[1] 6
在R语言中,语句块用{}括起来,当命令行检测到尚未封闭的{后,会自动将>替换为+,表示语句尚未写完。上面的if...else所实现的功能非常简单,如果a>b,就打印a;如果a和b相等,就打印字符串a==b;否则打印b。
由于a为5,b为6,所以打印了6。
函数
如果每次比较都输入一遍if...else,将会十分繁琐,使用函数,可以将常用的代码封装起来,以便于复用。
在R语言中,通过关键字function来创建函数,示例如下
> funTest<-function(a,b){
+ if(a>b) {print("a>b")}
+ else if(a==b){print("a==b")}
+ else{print("a<b")}
+ }
> funTest(3,4)
[1] "a<b"
> funTest(5,4)
[1] "a>b"
> funTest(4,4)
[1] "a==b"
这个函数实现了比较a,b大小,并输出比较结果的功能。但这个函数和数学上的函数并不相似,主要原因是没有返回值。所谓返回值,可以理解为y=f(x)中的y,在r语言中,通过return来实现这个功能,示例如下,
> funTest2<-function(){return(2)}
> funTest2()
[1] 2
递归
所谓递归,就是调用自身,例如下面的阶乘函数
> fac<-function(n){
+ if(n>1){return(n*fac(n-1))}
+ else{return(1)}
+ }
> fac(5)
[1] 120
当n>1时,返回n*fac(n-1),fac(5)的调用链条为
fac(5)->5*fac(4)->5*4*fac(3)->5*4*3*fac(2)->5*4*3*2*fac(1)->120
相关文章:
R语言编程基础
文章目录安装运算符判断函数递归安装 根据自己的操作系统,下载R语言环境后,安装,并将安装路径加入到环境变量,即可从命令行进入R环境 >rR version 4.2.2 (2022-10-31 ucrt) -- "Innocent and Trusting" Copyright …...
2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。
2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。 答案2023-03-15: 使用moonfdd/ffmpeg-go和moonfdd/sdl2-go库来实现屏幕录制并显示视频,大体流程如下: 1.使用libavdevice库中的AVInputFormat&…...
STM32外设-DMA
1. 简介 DMA(Direct Memory Access)—直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候, CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设…...
【面试题】面试官:如果后端给你 1w 条数据,你如何做展示?
最近一位朋友参加阿b的面试,然后面试官问了她这个问题,我问她咋写的,她一脸淡定的说:“虚拟列表。”大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面…...
第十二届蓝桥杯省赛详解
试题A:空间 1B是8位,32位二进制数占用4B空间,1MB2^10KB2^20B 那么可以存放32位二进制数的个数为256*2^20*8/3267108864 试题B:卡片 分析:因为数据只有2021,所以直接模拟即可 结果为:3181&…...
ssh创建秘钥对
1. 使用ssh-keygen 生成秘钥对 [root6zix89b87qmvuv ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): 按回车键或设置密钥的存储路径 Enter passphrase (empty for no passphrase): 按回车键或设置密钥的存…...
JS中sort()方法返回值?
参考 https://segmentfault.com/q/1010000043489928 精辟解释 就是说 sort() 会修改原数组项的排序,sort() 结束后会返回一个数组结果,这个结果其实就是原数组。并不是说会返回一个新的数组。 原理讲解 JS 分为栈内存和堆内存,栈内存可以…...
07从零开始学Java之如何正确的编写Java代码?
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者前言在上一篇文章中,壹哥带领大家开始编写了第一个Java案例,在我们的cmd命令窗口中输出了”Hello World“这…...
Python学习笔记14:网络编程
网络编程 几个网络模块 模块socket # 简单的服务器 import socket s socket.socket() host socket.gethostname() port 1234 s.bind((host, port))s.listen(5) while True: c, addr s.accept() print(Got connection from, addr) c.send(Thank you for connecting)c.…...
初入了解——什么是VUE
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
代码规范(C++)
1.命名规范 1.目录/文件 字母、数字、下划线构成,不同单词用下划线隔开。 2.函数/接口 小驼峰命名法。 3.命名空间 字母、数字、下划线构成,不同单词用下划线隔开,但是尽量只使用一个单词。 4.结构体/类 大驼峰命名法,不包…...
React教程详解四(hooks、pureComponent、Context通信、错误边界、children props与render props)
前言 hooks是react16.8.0版本新增加的新特性/新语法,最大的特点是可以在开发者在函数组件中使用state以及其它React特性,下面分别对其介绍~ React.useState() state hook能让函数组件也可以拥有state状态,方便其进行state状态的…...
【Spring从成神到升仙系列 二】2023年再不会 IOC 源码,就要被淘汰了
👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…...
菜鸟的进阶--手写一个小型dubbo框架
1.rpc调用流程2.组件1.Redis注册中心3.编解码/序列化在本例的Netty通信中,由于每次调用rpc服务都要发送同一个类对象invoker,所以可以使用Protobuf。但是在接受方法调用结果的时候就不行了,因为我们无法提前确定对方方法返回结果的类型&#…...
js逆向爬取某音乐网站某歌手的歌曲
js逆向爬取某音乐网站某歌手的歌曲一、分析网站1、案例介绍2、寻找列表页Ajax入口(1)页面展示图。(2)寻找部分歌曲信息Ajax的token。(3)寻找歌曲链接(4)获取歌曲名称和id信息3、寻找…...
为什么软件测试面试了几个月都没有offer,从HR角度分析
首先,我觉得你在软件测试面试的过程中,逻辑比较混乱的最大一个原因是,说明你没有形成一个一个整体的体系。 导致你说的时候很多东西都杂乱无章。 我个人认为软件测试,其实开始首先进行的是一些需求的分析工作,之后呢…...
DC-7 靶场学习
文章目录信息搜集账号密码获取修改密码反弹shell得到flag信息搜集 首先获取目标ip。 arp-scan -l nmap -sP 192.168.28.0/24得到目标ip为: 192.168.28.139先访问页面。 翻译一下。 欢迎来到 DC-7DC-7引入了一些“新”概念,但我会让你弄清楚它们是什么…...
深入理解JavaScript的事件冒泡与事件捕获
前言JavaScript中提供了很多操作DOM的API。事件冒泡和事件捕获是指浏览器中处理DOM元素上事件的两种不同方式。事件冒泡和事件捕获都是JavaScript事件模型中的一部分,可以用来处理事件。对于这个问题,在实际开发中,并不是非常重要,…...
格密码学习笔记(六):格中模运算
文章目录格中取模运算CVP和格的陪集致谢格中取模运算 定义(格的基本区域) P⊂Rn:{Px∣x∈L}\mathcal{P} \subset \mathbb{R}^n : \{ \mathcal{P} \bm{x} | \bm{x} \in \mathcal{L} \}P⊂Rn:{Px∣x∈L}是Rn\mathbb{R}^nRn的一种划分。 用P\mathcal{P}P对…...
【C++】非常重要的——多态
凡是面向对象的语言,都有三大特性,继承,封装和多态,但并不是只有这三个特性,是因为者三个特性是最重要的特性,那今天我们一起来看多态! 目录 1.多态的概念 1.1虚函数 1.2虚函数的重写 1.3虚…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
