• R语言入门:向量的运算


    向量之间的加减乘除运算:

    > x <- 1
    > x
     [1]  1  2  3  4  5  6  7  8  9 10
    > x=x+1
    > x
     [1]  2  3  4  5  6  7  8  9 10 11
    > x = 1:10
    > x
     [1]  1  2  3  4  5  6  7  8  9 10
    > y = seq(1,100, length.out = 10)
    > y
     [1]   1  12  23  34  45  56  67  78  89 100
    > x*y
     [1]    1   24   69  136  225  336  469  624  801 1000
    > x**y
     [1]  1.000000e+00  4.096000e+03  9.414318e+10  2.951479e+20
     [5]  2.842171e+31  3.771117e+43  4.183778e+56  2.760699e+70
     [9]  8.464150e+84 1.000000e+100

    这些代码看起来完全没有任何问题,就像之前我们已经接触过的其他语言的编程一样,但是后面就有一些R语言自带的特性了,比如说有两个不同长度的向量在进行加减乘除的时候,运算的规律是小的向量不断循环地去乘上大的向量,并且大的向量的长度必须是短的向量的整数倍,不然程序就会报错。我们举个例子,假定有一个长度为2的向量Z(1,2),如下所示:

    z=c(1,2)
    > z
    [1] 1 2

    我们用这个创建好的向量去和刚才创建的X向量进行相乘,得到的结果如下所示:

    > z+x
     [1]  2  4  4  6  6  8  8 10 10 12
    > z*x
     [1]  1  4  3  8  5 12  7 16  9 20

    很显然R语言当中已经帮我们做了乘法,用Z向量当中的每一个component去乘或者加上X向量当中的每一个component并不断循环。如果这个时候x向量不是z向量的整数倍,那么计算机就不知道在哪里停止计算,就会报错,出现以下的情况,这是万万使不得的:

    > z=c(1,2,3)
    > z
    [1] 1 2 3
    > z*x
     [1]  1  4  9  4 10 18  7 16 27 10
    Warning message:
    In z * x : longer object length is not a multiple of shorter object length

    我们在R语言当中也可以很方便的使用%in%对一个向量当中的哪些元素在另外一个向量当中,如下所示:

    > c(1,2,3) %in% c(1,2,3,4)
    [1] TRUE TRUE TRUE
    > c(1,2,3) %in% c(1,5,6,7,8)
    [1]  TRUE FALSE FALSE

    判断之后的结果则会用TRUE,FALSE显示出来。

    在R当中也可以使用==来表示判断真假,比如说我们可以判断x和y是否是两个相同的向量,在判断的时候我们取x和y的向量长度都一样,数值不一样的特殊情况,判断的结果如下所示:

    > x==y
     [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    > x
     [1]  1  2  3  4  5  6  7  8  9 10
    > y
     [1]   1  12  23  34  45  56  67  78  89 100

    我们还可以使用log()函数来进行计算对数,里面的参数base表示底数,不带参数base则表示底数是自然对数e,如下所示:

    > log(16,base=2)
    [1] 4
    > log(16)
    [1] 2.772589
    > log(16)#默认是自然对数进行计算
    [1] 2.772589

    下面我们再创造一个向量对其进行运算,这里使用了max(),min(),以及sum()求和函数,字面意思也是很容易弄明白的,如下所示:

    > vec=1:100
    > vec
      [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24
     [25]  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48
     [49]  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
     [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96
     [97]  97  98  99 100
    > sum(vec)
    [1] 5050
    > max(vec)
    [1] 100
    > min(vec)
    [1] 1

    R语言当中还可以使用round()函数来表示保留几位小数,在下面我们就会遇到,如下所示:

    > var(vec)#方差
    [1] 841.6667
    > round(var(vec),digits = 6)
    [1] 841.6667
    > round(var(vec),digits = 2)
    [1] 841.67
    > prod(vec)#计算连乘的积
    [1] 9.332622e+157
    > median(vec)#计算中位数
    [1] 50.5
    > quantile(vec)#计算分位数
        0%    25%    50%    75%   100% 
      1.00  25.75  50.50  75.25 100.00 
    > quantile(vec,c(0.2,0.4,0.9))
     20%  40%  90% 
    20.8 40.6 90.1 
    > t=c(1,2,3,4,5,8,3,6)
    > which.max(t)
    [1] 6
    > which.min(t)
    [1] 1

    得解!今天的向量运算教程就到这里了!

  • 相关阅读:
    【尺取法】Jessica's Reading Problem
    【状态压缩】关灯问题2
    【AC自动机】多模匹配算法
    【蔡勒公式 】根据给定的年月日求出对应星期几
    【线段树】结训赛— H
    【快速幂 && 素数筛 && 数论】Carmichael Numbers
    【线段树】浅析--线段树
    【KMP】数据结构实验之串三:KMP应用
    【线段树】3771->数组计算机
    【字典树】2828 -> 字典树
  • 原文地址:https://www.cnblogs.com/geeksongs/p/12371528.html
Copyright © 2020-2023  润新知