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
betagamma相关函数
R语言数值计算
此外,还有Bessel函数:
  • besselI(x, nu, expon.scaled = FALSE)
  • besselK(x, nu, expon.scaled = FALSE)
  • besselJ(x, nu)
  • besselY(x, nu)
其中,排列组合函数choose和阶乘函数factorial比较常用。
复数函数
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
posted @ 2018-01-02 11:53  墨媒  阅读(1090)  评论(0编辑  收藏  举报