小白教程
所有教程
关于
Search
172.69.59.48
172.69.59.48
参数设置
贡献
退出
操作
编辑
移动
保护
信息
历史
删除
查看“R 基础运算”的源代码
本页内容
上一节:
R_注释
下一节:
R_数据类型
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:R 基础运算}}[[Category:R 教程|5]] = R 基础运算 = 本章介绍 R 语言的简单运算。 === 赋值 === 一般语言的赋值是 '''=''' 号,但是 R 语言是数学语言,所以赋值符号与我们数学书上的伪代码很相似,是一个左箭头 <- : <sample title="" desc="" lang="r" hererun="1"> a <- 123 b <- 456 print(a + b) </sample> 以上代码执行结果: <sample title="" desc="" lang="r" hererun="1"> [1] 579 </sample> 这个赋值符号是 R 语言的一个形式上的优点和操作上的缺点:形式上更适合数学工作者,毕竟不是所有的数学工作者都习惯于使用 '''=''' 作为赋值符号。 操作上来讲,< 符号和 - 符号都不是很好打的字符,这会让很多程序员不适应。因此,R 语言的比较新的版本也支持 = 作为赋值符: <sample title="" desc="" lang="r" hererun="1"> a = 123 b = 456 print(a + b) </sample> 这也是合法的 R 程序。 '''注意:'''很难考证从 R 的哪个版本开始支持了 '''=''' 赋值,但是本教程习用的 R 版本是 4.0.0。 === 数学运算符 === 下表列出了主要的数学运算符以及他们的运算顺序: {| class="table table-striped table-hover" ! 优先级 ! 符号 ! 含义 |- | 1 | () | 括号 |- | 2 | ^ | 乘方运算 |- | 3 | %% | 整除求余 |- | | %/% | 整除 |- | 4 | * | 乘法 |- | | / | 除法 |- | 5 | + | 加法 |- | | - | 减法 |} 以下实例演示了简单的数学运算: <sample title="" desc="" lang="r" hererun="1"> > 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 </sample> === 关系运算符 === 下表列出了 R 语言支持的关系运算符,关系运算符比较两个向量,将第一向量与第二向量的每个元素进行比较,结果返回一个布尔值。 {| class="table table-striped table-hover" ! 运算符 ! 描述 |- | > | 判断第一个向量的每个元素是否大于第二个向量的相对应元素。 |- | < | 判断第一个向量的每个元素是否小于第二个向量的相对应元素。 |- | == | 判断第一个向量的每个元素是否等于第二个向量的相对应元素。 |- | != | 判断第一个向量的每个元素是否不等于第二个向量的相对应元素。 |- | >= | 判断第一个向量的每个元素是否大于等于第二个向量的相对应元素。 |- | <= | 判断第一个向量的每个元素是否小于等于第二个向量的相对应元素。 |} <sample title="" desc="" lang="r" hererun="1"> 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) </sample> 执行以上代码输出结果为: <sample title="" desc="" lang="r" hererun="1"> [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 </sample> === 逻辑运算符 === 下表列出了 R 语言支持的逻辑运算符,可用于数字、逻辑和复数类型的向量。 非 0 的数字(正数或负数)都为 TRUE。 逻辑运算符比较两个向量,将第一向量与第二向量的每个元素进行比较,结果返回一个布尔值。 {| class="table table-striped table-hover" ! 运算符 ! 描述 |- | & | 元素逻辑与运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素都为 TRUE,则结果为 TRUE,否则为 FALSE。 |- | | | 元素逻辑或运算符,将第一个向量的每个元素与第二个向量的相对应元素进行组合,如果两个元素中有一个为 TRUE,则结果为 TRUE,如果都为 FALSE,则返回 FALSE。 |- | ! | 逻辑非运算符,返回向量每个元素相反的逻辑值,如果元素为 TRUE 则返回 FALSE,如果元素为 FALSE 则返回 TRUE。 |- | && | 逻辑与运算符,只对两个向量对第一个元素进行判断,如果两个元素都为 TRUE,则结果为 TRUE,否则为 FALSE。 |- | || | 逻辑或运算符,只对两个向量对第一个元素进行判断,如果两个元素中有一个为 TRUE,则结果为 TRUE,如果都为 FALSE,则返回 FALSE。 |} <sample title="" desc="" lang="r" hererun="1"> 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) </sample> 执行以上代码输出结果为: <sample title="" desc="" lang="r" hererun="1"> [1] TRUE TRUE FALSE TRUE [1] TRUE TRUE TRUE TRUE [1] FALSE FALSE FALSE FALSE [1] TRUE [1] FALSE </sample> === 赋值运算符 === R 语言变量可以使用向左,向右或等于操作符来赋值。 下表列出了 R 语言支持的赋值运算符。 {| class="table table-striped table-hover" !width="50%"| 运算符 !width="50%"| 描述 |- | <− = <<− | 向左赋值。 |- | −> −>> | 向右赋值。 |} <sample title="" desc="" lang="r" hererun="1"> # 向左赋值 v1 <- c(3,1,TRUE,"xiaobai") v2 <<- c(3,1,TRUE,"xiaobai") v3 = c(3,1,TRUE,"xiaobai") print(v1) print(v2) print(v3) # 向右赋值 c(3,1,TRUE,"xiaobai") -> v1 c(3,1,TRUE,"xiaobai") ->> v2 print(v1) print(v2) </sample> 执行以上代码输出结果为: <sample title="" desc="" lang="r" hererun="1"> [1] "3" "1" "TRUE" "xiaobai" [1] "3" "1" "TRUE" "xiaobai" [1] "3" "1" "TRUE" "xiaobai" [1] "3" "1" "TRUE" "xiaobai" [1] "3" "1" "TRUE" "xiaobai" </sample> === 其他运算符 === R 语言还包含了一些特别的运算符。 {| class="table table-striped table-hover" ! 运算符 ! 描述 |- | : | 冒号运算符,用于创建一系列数字的向量。 |- | %in% | 用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE。 |- | %*% | 用于矩阵与它转置的矩阵相乘。 |} <sample title="" desc="" lang="r" hererun="1"> # 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) </sample> 执行以上代码输出结果为: <sample title="" desc="" lang="r" hererun="1"> [1] 1 2 3 4 5 6 7 8 9 10 [1] TRUE [1] FALSE [,1] [,2] [1,] 65 82 [2,] 82 117 </sample> === 数学函数 === 常见对一些数学函数有: {| class="table table-striped table-hover" ! 函数 ! 说明 |- | sqrt(n) | n的平方根 |- | exp(n) | 自然常数e的n次方, |- | log(m,n) | m的对数函数,返回n的几次方等于m |- | log10(m) | 相当于log(m,10) |} 以下实例演示了数学函数的应用: <sample title="" desc="" lang="r" hererun="1"> > sqrt(4) [1] 2 > exp(1) [1] 2.718282 > exp(2) [1] 7.389056 > log(2,4) [1] 0.5 > log10(10000) [1] 4 </sample> 取整函数: {| class="table table-striped table-hover" ! 名称 ! 参数模型 ! 含义 |- | round | (n) | 对 n 四舍五入取整 |- | | (n, m) | 对 n 保留 m 位小数四舍五入 |- | ceiling | (n) | 对 n 向上取整 |- | floor | (n) | 对 n 向下取整 |} 以下实例演示了取整函数的应用: <sample title="" desc="" lang="r" hererun="1"> > round(1.5) [1] 2 > round(2.5) [1] 2 > round(3.5) [1] 4 > round(4.5) [1] 4 </sample> '''注意''':R 中的 round 函数有些情况下可能会"舍掉五"。 当取整位是偶数的时候,五也会被舍去,这一点与 C 语言有所不同。 R 的三角函数是弧度制: <sample title="" desc="" lang="r" hererun="1"> > sin(pi/6) [1] 0.5 > cos(pi/4) [1] 0.7071068 > tan(pi/3) [1] 1.732051 </sample> 反三角函数: <sample title="" desc="" lang="r" hererun="1"> > asin(0.5) [1] 0.5235988 > acos(0.7071068) [1] 0.7853981 > atan(1.732051) [1] 1.047198 </sample> 如果学习过概率论和统计学,应该对以下的概率分布函数比较了解,因为 R 语言为数学工作者设计,所以经常会用到: <sample title="" desc="" lang="r" hererun="1"> > 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 </sample> 这四个都是用来计算正态分布的函数。它们的名字都以 norm 结尾,代表"正态分布"。 分布函数名字的前缀有四种: * '''d''' - 概率密度函数 * '''p''' - 概率密度积分函数(从无限小到 x 的积分) * '''q''' - 分位数函数 * '''r''' - 随机数函数(常用于概率仿真) '''注''':由于本教程不是阐述数学专业理论的教程,所以对有关概率分布的数学理论不作详细解释。R 语言除了含有正态分布函数以外还有泊松分布 (pois, Poisson) 等常见分布函数,如果想详细了解可以学习"概率论与数理统计"。
返回至“
R 基础运算
”。
上一节:
R_注释
下一节:
R_数据类型