数值型向量及其计算

四、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:5seq(2,5)等同于2:5seq(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:5seq(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()中可以用modarg指定模和辐角,如 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