数值型向量及其计算
四、R的数据类型
4.1 R数据类型
R语言基本的数据类型有数值, 逻辑型(TRUE, FALSE),文本(字符串)。 支持缺失值,有专门的复数类型。
R语言数据结构包括向量,矩阵和数据框,多维数组, 列表,对象等。数据中元素、行、列还可以用名字访问。 最基本的是向量类型。 向量类型数据的访问方式也是其他数据类型访问方式的基础。
4.2 数值型向量及其计算
4.2.1 四则运算
向量与标量(单个数值称为标量) 的运算为每个元素与标量的运算
等长向量的运算为对应元素两两运算
两个不等长向量也可以进行四则运算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPZdsgKF-1594178613233)(https://s1.ax1x.com/2020/07/03/NOa3Gj.png)]
除了加、减、乘、除、乘方, R还支持整除运算和求余运算。 用%/%
表示整除,用%%
表示求余。
4.2.2 向量函数
4.2.2.1 向量化的函数
R中的函数一般都是向量化的: 在R中, 如果普通的一元函数以向量为自变量,一般会对每个元素计算。 这样的函数包括sqrt, log10, log, exp, sin, cos, tan等许多。 如
为了查看这些基础的数学函数的列表,运行命令help.start()
, 点击链接“Search Engine and Keywords”, 找到“Mathematics”栏目, 浏览其中的“arith”和“math”链接中的说明。 常用的数学函数有:
- 舍入:
ceiling
,floor
,round
,signif
,trunc
,zapsmall
- 符号函数
sign
- 绝对值
abs
- 平方根
sqrt
- 对数与指数函数
log
,exp
,log10
,log2
- 三角函数
sin
,cos
,tan
- 反三角函数
asin
,acos
,atan
,atan2
- 双曲函数
sinh
,cosh
,tanh
- 反双曲函数
asinh
,acosh
,atanh
有一些不太常用的数学函数:
- 贝塔函数
beta
,lbeta
- 伽玛函数
gamma
,lgamma
,digamma
,trigamma
,tetragamma
,pentagamma
- 组合数
choose
,lchoose
- 富利叶变换和卷积
fft
,mvfft
,convolve
- 正交多项式
poly
- 求根
polyroot
,uniroot
- 最优化
optimize
,optim
- Bessel函数
besselI
,besselK
,besselJ
,besselY
- 样条插值
spline
,splinefun
- 简单的微分
deriv
如果自己编写的函数没有考虑向量化问题, 可以用Vectorize()
函数将其转换成向量化版本。
4.2.2.2 排序函数
sort(x)
返回排序结果。 rev(x)
返回把各元素排列次序反转后的结果。如
4.2.2.3 统计函数
sum
(求和), mean
(求平均值), var
(求样本方差), sd
(求样本标准差), min
(求最小值), max
(求最大值),range
(求最小值和最大值)等函数称为统计函数, 把输入向量看作样本,计算样本统计量。 prod
求所有元素的乘积。
cumsum和cumprod计算累加和累乘积。如
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-urzwOa2b-1594178613240)(https://s1.ax1x.com/2020/07/08/UEchng.png)]
其它一些类似函数有pmax
, pmin
, cummax
, cummin
等。
4.2.2.4 生成规则序列的函数
seq函数是冒号运算符的推广。 比如,seq(5)
等同于1:5
。 seq(2,5)
等同于2:5
。 seq(11, 15, by=2)
产生11,13,15。 seq(0, 2*pi, length.out=100)
产生从0到的等间隔序列, 序列长度指定为100。
从这些例子可以看出,S函数可以带自变量名调用。 每个函数的变量名和用法可以查询其帮助信息, 在命令行界面用“?函数名”的方法查询。 在使用变量名时次序可以颠倒, 比如seq(to=5, from=2)}
仍等同于2:5
。
rep()
函数用来产生重复数值。 为了产生一个初值为零的长度为n的向量, 用x <- rep(0, n)
。rep(c(1,3), 2)
把第一个自变量重复两次, 结果相当于c(1,3,1,3)
。
rep(c(1,3), c(2,4))
则需要利用R的一般向量化规则, 把第一自变量的第一个元素1按照第二自变量中第一个元素2的次数重复, 把第一自变量中第二个元素3按照第二自变量中第二个元素4的次数重复, 结果相当于c(1,1,3,3,3,3)
。
如果希望重复完一个元素后再重复另一元素,用each=
选项, 比如rep(c(1,3), each=2)
结果相当于c(1,1,3,3)
。
有一点技术性的小问题: 1:5
和seq(5)
的结果是整型(integer)的, c(1,3,5)
和seq(1, 5, by=2)
的结果是浮点型(double)的。
4.2.3 复数向量
复数常数表示如3.5+2.4i
, 1i
。 用函数complex()
生成复数向量, 指定实部和虚部。 如complex(real = c(1,0,-1,0), imaginary = c(0,1,0,-1))
相当于c(1+0i, 1i, -1+0i, -1i)
。
在complex()
中可以用mod
和arg
指定模和辐角,如 complex(mod=1, arg=(0:3)/2*pi)
结果同上。
用Re(z)
求z
的实部, 用Im(z)
求z的虚部, 用Mod(z)
或abs(z)
求z的模, 用Arg(z)
求z的辐角, 用Conj(z)
求z的共轭。
sqrt
, log
, exp
, sin
等函数对复数也有定义, 但是函数定义域在自变量为实数时可能有限制而复数无限制, 这时需要区分自变量类型。如
注:本文章参考了http://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/intro-example.html