21
2020
08

R 基础运算

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


赋值


一般语言的赋值是 = 号,但是 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 ^ 乘方运算

3 %% 整除求余

  %/% 整除

4 * 乘法

  / 除法

5 + 加法

  - 减法

优先级 符号 含义
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]  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

逻辑运算符


下表列出了 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]  TRUE  TRUE FALSE  TRUE

[1] TRUE TRUE TRUE TRUE

[1] FALSE FALSE FALSE FALSE

[1] TRUE

[1] FALSE

赋值运算符


R 语言变量可以使用向左,向右或等于操作符来赋值。


下表列出了 R 语言支持的赋值运算符。


运算符 描述

<−


=


<<−


向左赋值。

<−


=


<<−


向右赋值。

实例

# 向左赋值

v1 <- c(3,1,TRUE,"runoob")

v2 <<- c(3,1,TRUE,"runoob")

v3 = c(3,1,TRUE,"runoob")

print(v1)

print(v2)

print(v3)



# 向右赋值

c(3,1,TRUE,"runoob") -> v1

c(3,1,TRUE,"runoob") ->> v2 

print(v1)

print(v2)

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


[1] "3"      "1"      "TRUE"   "runoob"

[1] "3"      "1"      "TRUE"   "runoob"

[1] "3"      "1"      "TRUE"   "runoob"

[1] "3"      "1"      "TRUE"   "runoob"

[1] "3"      "1"      "TRUE"   "runoob"

其他运算符


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


运算符 描述

: 冒号运算符,用于创建一系列数字的向量。

%in% 用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE。

%*% 用于矩阵与它转置的矩阵相乘。

实例

# 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

数学函数


常见对一些数学函数有:


函数 说明

sqrt(n) n的平方根

exp(n) 自然常数e的n次方,

log(m,n) n的对数函数,返回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.177589 6.413927 4.206032

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


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


d - 概率密度函数

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

q - 分位数函数

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

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

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。