R数值操作笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
[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 > x <- c(NA, 1:3, -1:1/0); x
[1] NA 1 2 3 -Inf NaN Inf
range(..., na.rm = FALSE, finite = FALSE)返回含最⼤值和最⼩值的向量[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;> #对于列表元素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。