R 语言学习教程,从入门到精通,R 基础运算(5)

news2024/9/22 21:33:43

1、R 基础运算

本章介绍 R 语言的简单运算。

1.1、赋值

一般语言的赋值是 = 号,但是 R 语言是数学语言,所以赋值符号与我们数学书上的伪代码很相似,是一个左箭头 <- :

a <- 123
b <- 456
print(a + b)

以上代码执行结果:

[1] 579

这个赋值符号是 R 语言的一个形式上的优点和操作上的缺点:形式上更适合数学工作者,毕竟不是所有的数学工作者都习惯于使用 = 作为赋值符号。
操作上来讲,< 符号和 - 符号都不是很好打的字符,这会让很多程序员不适应。因此,R 语言的比较新的版本也支持 = 作为赋值符:

a = 123
b = 456
print(a + b)

这也是合法的 R 程序。
注意:很难考证从 R 的哪个版本开始支持了 = 赋值,但是本教程习用的 R 版本是 4.0.0。

1.2、数学运算符

下表列出了主要的数学运算符以及他们的运算顺序:
在这里插入图片描述
以下示例演示了简单的数学运算:

> 1 + 2 * 3
[1] 7
> (1 + 2) * 3
[1] 9
> 3 / 4
[1] 0.75
> 3.4 - 1.2
[1] 2.2
> 1 - 4 * 0.5^3
[1] 0.5
> 8 / 3 %% 2
[1] 8
> 8 / 4 %% 2
[1] Inf
> 3 %% 2^2
[1] 3
> 10 / 3 %/% 2
[1] 10

1.3、关系运算符

下表列出了 R 语言支持的关系运算符,关系运算符比较两个向量,将第一向量与第二向量的每个元素进行比较,结果返回一个布尔值。
在这里插入图片描述

v <- c(2,4,6,9)
t <- c(1,4,7,9)
print(v>t)
print(v < t)
print(v == t)
print(v!=t)
print(v>=t)
print(v<=t)

执行以上代码输出结果为:

[1]  TRUE FALSE FALSE FALSE
[1] FALSE FALSE  TRUE FALSE
[1] FALSE  TRUE FALSE  TRUE
[1]  TRUE FALSE  TRUE FALSE
[1]  TRUE  TRUE FALSE  TRUE
[1] FALSE  TRUE  TRUE  TRUE

1.4、逻辑运算符

下表列出了 R 语言支持的逻辑运算符,可用于数字、逻辑和复数类型的向量。
大于 1 的数字都为 TRUE。
逻辑运算符比较两个向量,将第一向量与第二向量的每个元素进行比较,结果返回一个布尔值。
在这里插入图片描述

v <- c(3,1,TRUE,2+3i)
t <- c(4,1,FALSE,2+3i)
print(v&t)
print(v|t)
print(!v)

# &&、||只对第一个元素进行比较
v <- c(3,0,TRUE,2+2i)
t <- c(1,3,TRUE,2+3i)
print(v&&t)

v <- c(0,0,TRUE,2+2i)
t <- c(0,3,TRUE,2+3i)
print(v||t)

执行以上代码输出结果为:

[1]  TRUE  TRUE FALSE  TRUE
[1] TRUE TRUE TRUE TRUE
[1] FALSE FALSE FALSE FALSE
[1] TRUE
[1] FALSE

1.5、赋值运算符

R 语言变量可以使用向左,向右或等于操作符来赋值。
下表列出了 R 语言支持的赋值运算符。
在这里插入图片描述

# 向左赋值
v1 <- c(3,1,TRUE,"nhooo")
v2 <<- c(3,1,TRUE,"nhooo")
v3 = c(3,1,TRUE,"nhooo")
print(v1)
print(v2)
print(v3)

# 向右赋值
c(3,1,TRUE,"nhooo") -> v1
c(3,1,TRUE,"nhooo") ->> v2 
print(v1)
print(v2)

执行以上代码输出结果为:

[1] "3"      "1"      "TRUE"   "nhooo"
[1] "3"      "1"      "TRUE"   "nhooo"
[1] "3"      "1"      "TRUE"   "nhooo"
[1] "3"      "1"      "TRUE"   "nhooo"
[1] "3"      "1"      "TRUE"   "nhooo"

1.6、其他运算符

R 语言还包含了一些特别的运算符。
在这里插入图片描述

# 1 到 10 的向量
v <- 1:10
print(v) 

# 判断数字是否在向量 v 中
v1 <- 3
v2 <- 15
print(v1 %in% v) 
print(v2 %in% v) 

# 矩阵与它转置的矩阵相乘
M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
t = M %*% t(M)
print(t)

执行以上代码输出结果为:

[1]  1  2  3  4  5  6  7  8  9 10
[1] TRUE
[1] FALSE
     [,1] [,2]
[1,]   65   82
[2,]   82  117

1.7、数学函数

常见对一些数学函数有:
在这里插入图片描述
以下示例演示了数学函数的应用:

> sqrt(4)
[1] 2
> exp(1)
[1] 2.718282
> exp(2)
[1] 7.389056
> log(2,4)
[1] 0.5
> log10(10000)
[1] 4

取整函数:
在这里插入图片描述
以下示例演示了取整函数的应用:

> round(1.5)
[1] 2
> round(2.5)
[1] 2
> round(3.5)
[1] 4
> round(4.5)
[1] 4

注意:R 中的 round 函数有些情况下可能会"舍掉五"。
当取整位是偶数的时候,五也会被舍去,这一点与 C 语言有所不同。
R 的三角函数是弧度制:

> sin(pi/6)
[1] 0.5
> cos(pi/4)
[1] 0.7071068
> tan(pi/3)
[1] 1.732051

反三角函数:

> asin(0.5)
[1] 0.5235988
> acos(0.7071068)
[1] 0.7853981
> atan(1.732051)
[1] 1.047198

如果学习过概率论和统计学,应该对以下的概率分布函数比较了解,因为 R 语言为数学工作者设计,所以经常会用到:

> dnorm(0)
[1] 0.3989423
> pnorm(0)
[1] 0.5
> qnorm(0.95)
[1] 1.644854
> rnorm(3, 5, 2) # 产生 3 个平均值为 5,标准差为 2 的正态随机数
[1] 4.177589 6.413927 4.206032

这四个都是用来计算正态分布的函数。它们的名字都以 norm 结尾,代表"正态分布"。
分布函数名字的前缀有四种:
d - 概率密度函数
p - 概率密度积分函数(从无限小到 x 的积分)
q - 分位数函数
r - 随机数函数(常用于概率仿真)
注:由于本教程不是阐述数学专业理论的教程,所以对有关概率分布的数学理论不作详细解释。R 语言除了含有正态分布函数以外还有泊松分布 (pois, Poisson) 等常见分布函数,如果想详细了解可以学习"概率论与数理统计"。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一个基于Node.js和Vue的农产品销售与交流平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

RabbitMQ-安装篇(阿里云主机)

一、操作系统 用的是Alibaba Cloud Linux release 3 (Soaring Falcon)系统&#xff0c;可以通过命令&#xff1a;lsb_release -a 查看系统信息。 二、安装RabbitMQ RabbitMQ 是基于 Erlang 语言构建的&#xff0c;要安装RabbitMQ&#xff0c;需先安装Erlang环境。通过Erlang V…

【IO】使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上一份

目录 1、使用有名管道实现&#xff0c;一个进程用于给另一个进程发消息&#xff0c;另一个进程收到消息后&#xff0c;展示到终端上&#xff0c;并且将消息保存到文件上一份 2、使用有名管道实现两个进程间相互通信 1、使用有名管道实现&#xff0c;一个进程用于给另一个进程发…

Linux权限-普通权限

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 根据前面Linux用户介绍&#xff0c;里面涉及到超级管理员&#xff0c;普通用户&…

AI技术重塑招聘流程:效率与精准度的双重提升

一、引言 在21世纪的数字经济浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度渗透到社会经济的各个领域&#xff0c;其中&#xff0c;人力资源&#xff08;HR&#xff09;管理领域也不例外。作为组织发展与人才战略的核心环节&#xff0c;招聘流程正经…

VoNR网络架构与网元 IMS终端号码结构(VoLTE和VoNR适用)

目录 1. VoNR网络架构与网元 1.1 VoNR架构 vs VoLTE架构 1.2 回顾语音网络的演进与“分离” 1.3 TS23.228给出的5G的VoNR国际漫游 Home Routed 方案架构图 1.4 VoNR 网络架构图&#xff08;2022版&#xff09; 1.5 IMS 网元分类&#xff08;VoNR VoLTE 适用&#xff09…

【SpringBoot】集成Redis

[TOC] 1 redis ​ redis是一个用C语言开发的&#xff0c;基于内存结构进行键值对数据存储、高性能、非关系型NoSQL数据库 ​ 官网&#xff1a; https://redis.io/ 1.1 特点 基于内存存储&#xff0c;数据读写效率很高本身支持持久化虽然基于key-value存储&#xff0c;但是…

excel中有些以文本格式存储的数值如何批量转换为数字

一、背景 1.1 文本格式存储的数值特点 在平时工作中有时候会从别地方导出来表格&#xff0c;表格中有些数值是以文本格式存储的&#xff08;特点&#xff1a;单元格的左上角有个绿色的小标&#xff09;。 1.2 文本格式存储的数值在排序时不符合预期 当我们需要进行排序的时候…

HashMap中 put()方法的流程、扩容的思路(源码分析~)

文章目录 put() 方法的流程扩容流程为什么它会按照2的幂次方进行扩容呢&#xff1f; put() 方法的流程 下面我们通过分析源码来总结一下 put() 方法的流程 扩容流程 根据上图的分析&#xff0c;就可以总结出 HashMap 的扩容流程&#xff1a; 在插入元素时&#xff0c;会先…

LMDrive 端到端闭环自动驾驶框架

LMDrive&#xff0c;一种新颖的语言引导的端到端闭环自动驾驶框架。LMDrive独特地处理和整合多模态传感器数据与自然语言指令&#xff0c;使车辆能够在现实的指令设置中与人类和导航软件进行交互。 LMDrive由两个主要部分组成&#xff1a; 1&#xff09;一个视觉编码器&#x…

(javaweb)java中spring项目的搭建

spring 1.地位高-- 后端web开发--基于springboot开始 二.SpringBoot Web入门 1. http--请求协议 localhost--本机服务 8080--端口号 /hello--访问的资源 发起请求之后要被web应用程序处理 路径访问成功&#xff01;&#xff01;&#xff01;localhost&#xff1a;8080/hel…

桌面云备份可以删除吗?安不安全

桌面云备份可以删除吗&#xff1f;答案是可以的。如果用户不需要这些备份或者想要释放存储空间&#xff0c;桌面云备份是可以进行删除的&#xff0c;并且删除桌面云备份是一个相对安全的过程&#xff0c;但需要注意以下几点来确保操作的安全性和数据的完整性。 一、桌面云备份…

C# Unity 面向对象补全计划 泛型约束

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 1.泛型约束了什么 在C#中&#xff0c;泛型约束用于限制泛型类型参数的类型 可以在泛型类型或方法的声明中使用 where 关键字来指定这些约束 2.约束栗子 基类约束…

ShardingSphere之ShardingProxy实战操作、分布式事务

文章目录 简介基础使用部署ShardingProxy配置分库分表策略 分布式事务机制介绍XA事务Demo使用另外两种XA事务管理器 简介 ShardingSphere的两个核心产品分别为ShardingJDBC和ShardingProxy。前文已经详细介绍了ShardingJDBC的具体使用&#xff0c;接下来介绍服务端的分库分表S…

MyBatis搭建和增删改查

MyBatis是一个开源的持久层框架&#xff0c;用于处理数据库的增删改查操作。它能够将Java对象与数据库中的数据进行映射关系的配置&#xff0c;并自动生成对应的SQL语句&#xff0c;从而简化了数据库操作的编码工作。 MyBatis的核心思想是将SQL语句与Java代码分离&#xff0c;…

Java01 Java预备知识

第一节&#xff1a;Java预备知识 进制转化 &#xff08;1&#xff09;&#xff1a;二进制转十进制采用数字与阶码相乘并相加&#xff0c;阶码从右往左依次增大&#xff0c;从左往右依次减小。 例&#xff1a;100&#xff08;2&#xff09;0*2^00*2^11*2^44(10) (2)&#xff1a…

【远程桌面】远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法

转发原文&#xff1a;https://blog.csdn.net/juanjuan_01/article/details/127005255 错误提示 Windows10系统中远程连接服务器的时候出现如下错误的提示&#xff1a; 解决方案一&#xff1a; 步骤1、winR打开运行窗口 步骤2、输入gpedit.msc命令&#xff0c;点击“确定”&a…

Go语言-- 版本管理go module以及go.sum详解

为了确保一致性构建&#xff0c;Go语言中引入了go.mod文件来标记每个依赖包的版本&#xff0c;在构建过程中go命令会下载go.mod中的依赖包&#xff0c;下载的依赖包会缓存在本地&#xff0c;以便下次构建。 在进行go语言项目开发的时候&#xff0c;会依赖3种类型的库包&#x…

使用ThreadLocal来存取单线程内的数据

一.什么是ThreadLocal&#xff1f; ThreadLocal&#xff0c;即线程本地变量。如果你创建了一个 ThreadLocal变量&#xff0c;那么访问这个变量的每个线程都会有这个变量的一个本地拷贝&#xff0c;多个线程操作这个变量的时候&#xff0c;实际是在操作自己本地内存里面的变量&…

Selenium+Python自动化测试:解决无法启动IE浏览器及报错问题

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言&#xff1a;记录启动IE浏览器的报错及解决方法。 错误1&#xff1a; selenium.common.exceptions.WebDriverException: Message: IEDriverServer.exe execu…