R语言常见运算符
R语言中常见的数学运算符如下所示:
运算符号 | 描述 | 示例 |
---|---|---|
x + y |
相加 | 2+3=5 |
x - y |
相减 | 8-2=6 |
x * y |
相乘 | 3*2=6 |
x / y |
除以 | 10/5=2 |
x^y 或x**y |
幂 | 2^5=32 |
x %% y |
x被y整除后的余数(x对y求模) | 7%%3=1 |
x %/%y |
x整除y,仅保留整数部分 | 7%/%3=2 |
R语言常见数学函数
常见数学函数如下所示:
函数 | 功能 |
---|---|
abs(x) | 取x的绝对值 |
log(x, base=y) | 以y为底,求x的对数,默认情况下返回自然对数 |
exp(x) | 返回x的自然指数 |
sqrt(x) | 返回x的平方根 |
factorial(x) | x的阶乘(x! ) |
choose(x,y) | 计算从x个可选元素中选择y个可能的组合数 |
例如,现在求1、2、3这个三个数字的log值(自然对数),如下所示:
|
|
如果要计算以2为底的对数,需要添加base=2
参数,如下所示:
|
|
如果要计算以2为底,10为底的对数,直接使用log2()
或log10()
即可。
科学计数法
在R中,可以使用科学计数法,如下所示:
|
|
如果要取消科学计算法,操作如下:
|
|
format()
函数输出科学计数法:
|
|
结果如下所示:
|
|
各种近似值
常规近似值round()
R最多可以表示多达16位精度的数据,但实际中用不了那么多,可以使用近似值round
,并添加上digits
参数,如下所示:
|
|
如果要精确到百位,可以传入负数,如下所示:
|
|
有效数字signif()
如果只关心有效数据,可以使用signif()
函数,如下所示:
|
|
向下取整floor()
floor(x)
朝小于x的近似整数近似,如下所示:
|
|
向上取整ceiling()
ceiling(x)
朝大于x的最近整数近似,如下所示:
|
|
截取整数部分trunc()
trunc(x)
直接截取整数部分,如下所示:
|
|
三角函数
R中含有完整的三角函数,例如?Trig
就能获取相关的帮忙文档,如下所示:
|
|
余弦值cos()
R中使用的是弧度值,而非角度值,因此直接使用角度会出问题,例如我们现在如果要计算120度的余弦值,输入cos(180)
,如下所示:
|
|
此时其实计算提180这个弧度的余弦值,因此如果要计算一个角度的余弦值,需要使用名为pi
的特殊变量,它表示π的值,如下所示:
|
|
R中表示数值的特殊符号
在一些情况下,总有一些数字没法具体表示,例如在R中常常会见到NA
,Inf
等这种符号。
无穷大Inf
例如当我们使用0作为除数的时候,结果就是Inf
,如下所示:
|
|
Inf
就表示无穷大,它是Infinity的缩写,负无穷大则是-Inf
。如果要检查一个数是否为无穷,可以使用is.finite()
或is.infinite()
函数,当一个数是有限大时,is.finite()
返回TRUE,如果一个数为无穷大时,is.infinite()
返回TRUE,如下所示:
|
|
无定义NaN
在R中,还有一种计算结果是NaN
,它是Not a Number
的缩写,它表示无定义数,如下所示:
|
|
虽然NaN
表示无定义,但在R中,它还是可以视为一个数,也能运算,如下所示:
|
|
缺失值NA
R使用NA
来表示缺失值,它是Not Available
的它定,但它也可以当作一个数字来使用,并且可以赋值给其它变量,如下所示:
|
|
使用is.na()
函数可以用于检测NA值,如下所示:
|
|
需要注意的是,对于NaN
,is.na()
函数也会返回TRUE
,但is.finite()
,is.infinite()
和is.nan()
则会返回FALSE,如下所示:
|
|
总结一下前面几种函数对于上述特殊值的计算结果,如下所示:
Function | Inf |
-Inf |
NaN |
NA |
---|---|---|---|---|
is.finite() |
FALSE | FALSE | FALSE | FALSE |
is.infinite() |
TRUE | TRUE | FALSE | FALSE |
is.nan() |
FALSE | FALSE | TRUE | FALSE |
is.na() |
FALSE | FALSE | TRUE | TRUE |
NULL值
NULL是一个特殊值,它与前面的那三个特殊符号不同,NULL表示的是一个空的变量,它最常用于列表中。例如当我们在创建列表中,我们可能想指定一个元素,表示它必须存在,但是暂没有赋值,如下所示:
|
|
结果如下所示:
|
|
NULL和NA的区别还在于,NA是一个标量值,而NULL不会占用任何空间,它的长度零,如下所示:
|
|
R中缺失值的处理complte.cases()
使用complete.cases
函数可以找出哪些行没有缺失值,现在演示一下。
这里使用的数据是learningr
包中的数据。
|
|
运行结果如下所示:
|
|
从中我们可以发现,有一些值是NA
。
假如我们不想要这些带有NA
的数据,就可以使用complete.cases()
函数,如下所示:
|
|
运行结果如下所示:
|
|
从上面结果可以看出来,含有NA
的行是24个,含有TRUE
的行是9个,使用complete.cases(deer_endocranial_volume)
去除掉含有NA
的行外,剩下9行,也就是不含NA的行。
any
与all
any
与all
是处理逻辑向量的函数,如果输入向量中至少包含一个TRUE
值或只包含TRUE
值,它们将返回TRUE,如下所示:
|
|
运行结果如下所示:
|
|
参考资料
- R语言轻松入门与提高 [法]Andrie de Vries ,[比利时]Joris Mey [法] Andrie de Vries 著
- 学习R.[美] Richard,Cotton 著刘军 译