zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【内推】平安产险大数据测试开发工程师,15-30k!
    python中的正则表达式(re模块)
    C#中ArrayList和string,string[]数组的转换
    C# 中的sealed修饰符学习
    面试题目记录
    C#中Internal class与静态类说明
    转载 C#使用Salt + Hash来为密码加密
    转载C# 对象转Json序列化
    使用https时,网站一些内容不能正常显示的问题
    转载 JQuery.data()方法学习
  • 原文地址:https://www.cnblogs.com/wychytu/p/8176485.html
Copyright © 2011-2022 走看看