R 基础运算

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

赋值

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

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

以上代码执行结果:

[1]579

这个赋值符号是 R 语言的一个形式上的优点和操作上的缺点:形式上更适合数学工作者,毕竟不是所有的数学工作者都习惯于使用 = 作为赋值符号。

操作上来讲,< 符号和 - 符号都不是很好打的字符,这会让很多程序员不适应。因此,R 语言的比较新的版本也支持 = 作为赋值符:

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

这也是合法的 R 程序。

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

数学运算符

下表列出了主要的数学运算符以及他们的运算顺序:

优先级符号含义
1()括号
2^乘方运算
3%%整除求余
%/%整除
4*乘法
除法
5+加法
-减法

以下示例演示了简单的数学运算:

>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

关系运算符

下表列出了 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]TRUEFALSEFALSEFALSE[1]FALSEFALSETRUEFALSE[1]FALSETRUEFALSETRUE[1]TRUEFALSETRUEFALSE[1]TRUETRUEFALSETRUE[1]FALSETRUETRUETRUE

逻辑运算符

下表列出了 R 语言支持的逻辑运算符,可用于数字、逻辑和复数类型的向量。

大于 1 的数字都为 TRUE。

逻辑运算符比较两个向量,将第一向量与第二向量的每个元素进行比较,结果返回一个布尔值。

运算符描述
&元素逻辑与运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素都为 TRUE,则结果为 TRUE,否则为 FALSE。
元素逻辑或运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素中有一个为 TRUE,则结果为 TRUE,如果都为 FALSE,则返回 FALSE。
!逻辑非运算符,返回向量每个元素相反的逻辑值,如果元素为 TRUE 则返回 FALSE,如果元素为 FALSE 则返回 TRUE。
&&逻辑与运算符,只对两个向量对第一个元素进行判断,如果两个元素都为 TRUE,则结果为 TRUE,否则为 FALSE。
逻辑或运算符,只对两个向量对第一个元素进行判断,如果两个元素中有一个为 TRUE,则结果为 TRUE,如果都为 FALSE,则返回 FALSE。
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]TRUETRUEFALSETRUE[1]TRUETRUETRUETRUE[1]FALSEFALSEFALSEFALSE[1]TRUE[1]FALSE

赋值运算符

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")->v1c(3,1,TRUE,"nhooo")->>v2print(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"

其他运算符

R 语言还包含了一些特别的运算符。

运算符描述
:冒号运算符,用于创建一系列数字的向量。
%in%用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE。
%*%用于矩阵与它转置的矩阵相乘。
#1到10的向量v<-1:10print(v)#判断数字是否在向量v中v1<-3v2<-15print(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]12345678910[1]TRUE[1]FALSE[,1][,2][1,]6582[2,]82117

数学函数

常见对一些数学函数有:

函数说明
sqrt(n)n的平方根
exp(n)自然常数e的n次方,
log(m,n)m的对数函数,返回n的几次方等于m
log10(m)相当于log(m,10)

以下示例演示了数学函数的应用:

>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(n)对 n 四舍五入取整
(n, m)对 n 保留 m 位小数四舍五入
ceiling(n)对 n 向上取整
floor(n)对 n 向下取整

以下示例演示了取整函数的应用:

>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.1775896.4139274.206032

这四个都是用来计算正态分布的函数。它们的名字都以 norm 结尾,代表"正态分布"。

分布函数名字的前缀有四种:

  • d - 概率密度函数

  • - 概率密度积分函数(从无限小到 x 的积分)

  • q - 分位数函数

  • - 随机数函数(常用于概率仿真)

:由于本教程不是阐述数学专业理论的教程,所以对有关概率分布的数学理论不作详细解释。R 语言除了含有正态分布函数以外还有泊松分布 (pois, Poisson) 等常见分布函数,如果想详细了解可以学习"概率论与数理统计"。

编辑于2024-05-20 14:46