四、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