R 数值操作笔记
R中数值计算的对象一般是向量或列表,不同长度的对象进行计算时,短的对象元素将被循环使用。
运算操作符 | |
+ - * / & | ! == != > >= < <= ^ 幂运算 %% 取模 %/% 整除 |
> a<-c(2,49,25,8) > b<-c(2,7,6) > a/b [1] 1.000000 7.000000 4.166667 4.000000 Warning message: In a/b : longer object length is not a multiple of shorter object length > 2^5 [1] 32 > 25%%6 [1] 1 > 13%/%5 [1] 2 > 7&8 [1] TRUE |
无归类的函数 | |
sign 取符号 | > sign(-2:2) [1] -1 -1 0 1 1 |
abs 取绝对值 | |
sqrt 取平方根 | > sqrt(-2:2) [1] NaN NaN 0.000000 1.000000 1.414214 Warning message: In sqrt(-2:2) : NaNs produced |
对数与指数函数 | |
log(x, base = exp(1)) 取base为底的对数,base缺省的情况下取自然对数 logb(x, base = exp(1)) 是为了兼容S语言而实现的log函数封装器 log10(x) 取常用对数 log2(x) 取2为底的对数 |
> log(64, 8) [1] 2 |
log1p(x) 计算log(1+x) |
|
exp(x) 取指数 | > exp(1) [1] 2.718282 |
expm1(x) 计算exp(x) - 1 |
|
取整舍入 | |
ceiling(x) 向上取整 |
> ceiling(3.666666) [1] 4 > ceiling(-3.666666) [1] -3 |
floor(x) 向下取整 |
> floor(3.666666) [1] 3 > floor(-3.666666) [1] -4 |
trunc(x, ...) 取整 |
> trunc(3.666666) [1] 3 > trunc(-3.666666) [1] -3 |
round(x, digits = 0) 四舍五入,正数的digits为小数个数,负数的digits为整数的个数 |
> round(3.666666,3) [1] 3.667 > round(-3.666666,3) [1] -3.667 > round(266.6666,-2) [1] 300 |
signif(x, digits = 6) 四舍五入,正数的digits为整数和小数的个数,负数的digits为整数的个数 |
> signif(3.666666,3) [1] 3.67 > signif(-3.666666,3) [1] -3.67 > signif(266.6666,-2) [1] 300 |
zapsmall(x, digits = getOption("digits")) zapsmall选取round的digits参数,以使向量中与最大绝对值相比接近0的数值被剃掉 |
> zapsmall function (x, digits = getOption("digits")) { if (length(digits) == 0L) stop("invalid 'digits'") if (all(ina <- is.na(x))) return(x) mx <- max(abs(x[!ina])) round(x, digits = if (mx > 0) max(0L, digits - log10(mx)) else digits) } |
三角函数 | |
sin(x) 正弦函数 | > sin(pi/6) [1] 0.5 |
cos(x) 余弦函数 | |
tan(x) 正切函数 | |
asin(x) 反正弦函数 | > asin(0.5) #->pi/6 [1] 0.5235988 |
acos(x) 反余弦函数 | |
atan(x) 反正切函数 | |
atan2 反正切函数 atan2(y, x)=atan(y/x). |
|
sinpi(x) 正弦函数 sinpi(x)=sin(pi*x) |
> sinpi(1/6) [1] 0.5 |
cospi(x) 余弦函数 cospi(x)=cos(pi*x) |
|
tanpi(x) 正切函数 tanpi(x)=tan(pi*x) |
|
双曲函数 | |
sinh(x) 双曲正弦函数 sinh(x)=(exp(x)-exp(-x))/2 |
> sinh(pi/6) [1] 0.5478535 > (exp(pi/6)-exp(-pi/6))/2 [1] 0.5478535 |
cosh(x) 双曲余弦函数 cosh(x)=(exp(x)+exp(-x))/2 |
|
tanh(x) 双曲正切函数 tanh(x)=sinh(x)/cosh(x) |
|
asinh(x) 反双曲正弦函数 | |
acosh(x) 反双曲余弦函数 | |
atanh(x) 反双曲正切函数 | |
汇总函数 | |
max(..., na.rm = FALSE) 取最大值 |
> max(5:1, pi) #-> one number [1] 5 |
min(..., na.rm = FALSE) 取最小值 |
> min(5:1, pi) #-> one number [1] 1 |
pmax(..., na.rm = FALSE) 取并行最大值 |
> pmax(5:1, pi) #-> 5 numbers [1] 5.000000 4.000000 3.141593 3.141593 3.141593 |
pmin(..., na.rm = FALSE) 取并行最小值 |
> pmin(5:1, pi) #-> 5 numbers [1] 3.141593 3.141593 3.000000 2.000000 1.000000 |
range(..., na.rm = FALSE, finite = FALSE) 返回含最大值和最小值的向量 |
> x <- c(NA, 1:3, -1:1/0); x [1] NA 1 2 3 -Inf NaN Inf > range(x) [1] NA NA > range(x, na.rm = TRUE) [1] -Inf Inf > range(x, finite = TRUE) [1] 1 3 |
which.min(x) 返回最小值下标 |
> x <- c(1:4, 0:5, 11);x [1] 1 2 3 4 0 1 2 3 4 5 11 > which.min(x) [1] 5 |
which.max(x) 返回最大值下标 |
> x <- c(1:4, 0:5, 11);x [1] 1 2 3 4 0 1 2 3 4 5 11 > which.max(x) [1] 11 |
any(..., na.rm = FALSE) 任一个元素值为真则返回TRUE; 所有元素值为假则返回FALSE; na.rm参数为FALSE时,没有元素值为真且数据中有NA值则返回NA |
> any(c(-2:0)>0) [1] FALSE > any(c(1:2,NA)>0) [1] TRUE > any(c(-2:0,NA)>0) [1] NA |
all(..., na.rm = FALSE) 所有元素值为真则返回TRUE; 任一个元素值为假则返回FALSE; na.rm参数为FALSE时,没有元素值为假且数据中有NA值则返回NA |
> all(c(1:2)>0) [1] TRUE > all(c(-2:0,NA)>0) [1] FALSE > all(c(1:2,NA)>0) [1] NA |
sum(..., na.rm = FALSE) 任一个元素值为NA则返回NA; 元素不含NA,任意元素值为NaN则返回NaN; 元素不含NA和NaN,返回元素和,NULL视为整数0 |
> sum(1:3) [1] 6 > sum(1:3,NA) [1] NA > sum(1:3,NaN) [1] NaN > sum(1:3,NaN,NA) [1] NA |
prod(..., na.rm = FALSE) 任一个元素值为NA则返回NA; 元素不含NA,任意元素值为NaN则返回NaN; 元素不含NA和NaN,返回元素乘积,NULL视为数字0 |
> prod(1:3) [1] 6 > prod(1:3,NA) [1] NA > prod(1:3,NaN) [1] NaN > prod(1:3,NaN,NA) [1] NA |
累计函数 | |
cumsum 取累计和 遇到NA或NaN元素,返回NA NULL元素会被忽略掉 |
> cumsum(1:5) [1] 1 3 6 10 15 > cumsum(c(1:3,NA,4:5)) [1] 1 3 6 NA NA NA > cumsum(c(1:3,NaN,4:5)) [1] 1 3 6 NA NA NA > cumsum(c(1:3,NULL,4:5)) [1] 1 3 6 10 15 |
cumprod 取累计乘积 遇到NA或NaN元素,返回NA NULL元素会被忽略掉 |
> cumprod(1:5) [1] 1 2 6 24 120 |
cummin 取累计最小值 如果累计最小值不为NA,遇到NaN元素输出NaN; 遇到NA元素输出NA NULL元素会被忽略掉 |
> #对于列表元素3 2 1 2 1 0 4 3 2,cummin第四个输入为2, > #比累计最小值1大,所以第四个输出为1 > cummin(c(3:1, 2:0, 4:2)) [1] 3 2 1 1 1 0 0 0 0 > cummin(c(3:1, NaN, 2:0, NA, 4:2)) [1] 3 2 1 NaN NaN NaN NaN NA NA NA NA |
cummax 取累计最大值 如果累计最小值不为NA,遇到NaN元素输出NaN; 遇到NA元素输出NA NULL元素会被忽略掉 |
> #对于列表元素3 2 1 2 1 0 4 3 2,cummin前六个输出都为第一个输入3, > #第七个输入为4,比累计最小值3大,所以第七个输出为4 > cummax(c(3:1, 2:0, 4:2)) #3 2 1 2 1 0 4 3 2 [1] 3 3 3 3 3 3 4 4 4 > cummax(c(3:1, NA, 2:0, NaN, 4:2)) [1] 3 3 3 NA NA NA NA NA NA NA NA |
beta和gamma相关函数 | |
此外,还有Bessel函数:
|
|
复数函数 | |
Re(z) 取实部 Im(z) 取虚部 Mod(z) 取模 Arg(z) 取幅角 Conj(z) 共轭复数 对于一个复数z=x + iy, r=Mod(z)=√(x^2+y^2), φ=Arg(z), x=r*cos(φ)且y=r*sin(φ) |
> 1:2 + 1i*(8:9) [1] 1+8i 2+9i > z <- complex(real = 1:3, imaginary = 7:9);z [1] 1+7i 2+8i 3+9i > Re(z) [1] 1 2 3 > Im(z) [1] 7 8 9 > Mod(z) [1] 7.071068 8.246211 9.486833 > Arg(z) [1] 1.428899 1.325818 1.249046 > Conj(z) [1] 1-7i 2-8i 3-9i |
排序函数 | |
rev 逆序 | > x <- c(1:5, 5:3);x [1] 1 2 3 4 5 5 4 3 > rev(x) [1] 3 4 5 5 4 3 2 1 |
sort(x, decreasing = FALSE, ...) 向量、列表或因子排序 |
> x <- c(1:5, 5:3);x [1] 1 2 3 4 5 5 4 3 > sort(x) [1] 1 3 4 15 92 |
order(..., na.last = TRUE, decreasing = FALSE) 次序下标,可用于多个变量,例如数据框 第一个输出为5,是由于第五个输入按增序排第一 |
> set.seed(1) > x <- sample(1:10, 5);x [1] 3 4 5 7 2 > order(x) [1] 5 1 2 3 4 |
rank(x, na.last = TRUE, ties.method = c("average", "first", "random", "max", "min")) 排名 |
> set.seed(1) > x <- sample(1:10, 5);x [1] 3 4 5 7 2 > rank(x) [1] 2 3 4 5 1 |