• R语言入门


    原链接:https://zhuanlan.zhihu.com/p/21576354

    一、三大件,你们还记得吗?

    A通道里的三大件:数据清洗、数据分析、数据可视化

    三大件今天暂时还讲不了,我们需要一点入门的预备知识。

    接下来要做的,则是实践标题中的内容:用几分钟了解R入门知识。

    二、首先,你得保证你的电脑里已经安装了R(这么简单的问题不用我再讲了吧。。)

    还没装的点这里去下载!!!!
    还有,R studio也必须安装。这是目前我感觉最好用的R用户界面,不装后悔,不装不是中国人,13亿人都装了你还在等什么。(点进去选择Download Rstidio Desktop)

    三、R入门知识到底有哪些东西?

    我总结成以下四个标题:

    命令行,数据对象,函数(function),par

    先记住这四个名字,本篇文章所有东西将围绕他们展开。

    其他所有的东西,我觉得都不是入门必须。虽然它们很有用,但它们不是必须。

    下面开始一个个讲。

    四、命令行

    R采用的是命令行输入界面,也就是我们常说的写代码。代码大概长这样:

    “>”之后就是光标,你可以向里面输入数字、计算式,也可以输入函数和变量,或者一切R能听懂的语言。R都会热情地给你反馈。

    当你安装好R和Rstudio之后,就可以尽情地尝(tiao)试(xi)命令行了。在Rstudio里面,命令行默认位于屏幕左下方区域,如图:

    左上区域则是代码储存窗口,你可以在里面先随便写点代码,一言不合就点击Run来运行它们。(以你们目前的实力,R应该会立马给你们报错。)

    命令行里面,一般会输入哪些东西?

    第一种——算式,诸如1+1,3+5之类的。这种时候R完全可以当做计算器来用。(简直是废话)值得一提的是,注意看上面的图,输入1+1之后R给出的返回值是[1] 2,这里方括号里的[1]代表的是顺序,我们会在后面(数据对象)具体讲解。

    第二种——调用对象。会在数据对象中讲解。

    第三种——函数,函数,函数,重要的事情说三遍。命令行里99%以上的输入,都是函数,你说重要不重要?具体的,我们会在函数里面详细讲解。

    五、数据对象

    如果说R是一个厨房,那么数据对象就是不同的容器,锅碗瓢盆应有尽有。数据只有借由容器,才能进行清洗、加工,以及用于分析。

    厨房里的锅碗瓢盆有很多种,R的数据对象也有很多种。但目前大家记住其中的三种就好:

    1.碗——向量(vector)

    厨房里最小的容器,一般都是碗。向量也是R里面最小、最基础的数据对象。

    > c(1,2,3,4,5)
    [1] 1 2 3 4 5
    > c(1:20)
     [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
    > 1:30
     [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22
    [23] 23 24 25 26 27 28 29 30
    

    函数c()的效果,就是把括号里面的东西做成一个向量,向量的不同元素以“,”作为分隔。

    而“:”的作用显而易见,1:20表示从1到20这20个数字。

    注意,看代码的最后一行,开头是方括号[23]。这代表这一行从向量的第23个元素开始。回想上一节,为什么“1+1”返回值是“[1] 2”呢?就是因为向量是R里面最小的数据对象,所以1+1不得不生成只有一个元素的向量。这就好比,厨房里最小的碗也有拳头大,但为了装一颗豆子,还是要大材小用。

    > x<-c(1,2,3,4)   #把向量赋值给x
    > y<-c(3,5,7,9)
    > x   #调用向量x
    [1] 1 2 3 4
    > y
    [1] 3 5 7 9
    > x[2]  #调用向量x的第二个元素
    [1] 2
    

    上面的代码很重要,它进行了一个最基本也是最重要的操作:赋值。可以看做是“给容器贴标签”

    方法很简单,采用“<-”符号就可以了。箭头指向标签名。上面的代码表示,有一个碗里放了四颗豆子分别叫做1、2、3、4,于是我们给这个碗贴上标签叫做“x”。另一个碗里放了四颗豆子叫做3、5、7、9,我们贴上“y”的标签。

    赋值有什么作用呢?作用就是,如果没有标签,我们可能就找不到这两个碗和里面的豆子了。

    赋值之后就是调用,只要输入变量名称(标签名)就能调用对应的内容(碗)。而输入变量名称+顺序号,就能调用单个元素(豆子)。如上所示

    > x+y
    [1]  4  7 10 13
    > x%*%y
        #这里“%*%”表示求两个向量的内积,然后会生成一个1*1矩阵
         [,1]
    [1,]   70
    > x*2
    [1] 2 4 6 8
    

    向量之间也可以直接运算,方法和初高中数学里学的向量运算差不多,类似于上面那些。大家可以自己实验一下。不明白的,你们就自己百度去吧。(不负责任的我啊。。)

    2.多功能橱柜——列表(list)

    列表是一个神奇的数据对象,如同厨房里的多功能橱柜。

    橱柜里有很多格子,每个格子都能盛放很多东西。列表也是这样,列表里可以单独分出很多格子,每个格子都能盛放一个单独的数据对象(可以是向量、矩阵,甚至是另外一个列表)。

    而橱柜的格子也需要编号,编号方法略有不同。看下面的例子:

    > list1<-list(x,y,c(3,3))
    > list1
    [[1]]
    [1] 1 2 3 4
    
    [[2]]
    [1] 3 5 7 9
    
    [[3]]
    [1] 3 3
    

    通过list()函数,我们定义了一个叫做list1的列表(多功能橱柜)。这里面现在有三个格子,非常清晰地显示在代码中,它们的编号方式是两个方括号[[1]]。

    聪明的读者应该也能想到,列表及其中的元素同样也能进行调用。

    > list1[[1]]
      #调用list1中的第一个“格子”
    [1] 1 2 3 4
    > list1[[1]][3]  #调用list1第一个“格子”里的第三个元素。
    [1] 3
    

    三个格子中,每个格子装一个向量。

    列表的作用是什么?等到下一章,你们就知道了。

    3.炒锅——数据框(data frame)

    数据框是R里面最重要的数据对象!数据框是R里面最重要的数据对象!数据框是R里面最重要的数据对象!重要的事情说三遍!

    炒锅在厨房里无疑也是最重要的。菜品的完成,大部分时间都依赖炒锅。我们数据分析的过程中,数据大部分时间也是呆在数据框里面的。

    但数据框这个名字有点抽象。其实,他就是二维表。或者再通俗一点,就是我们天天见到的表格。在R里面大概长成下面这样:

    States是一个数据框(表格),head()函数帮助我们调用了这个表格的前五行。

    我们能看到,这个表格包括美国各个州的人口、收入等等数据。虽然没有画线,但是还是能看得出典型的行标签、列标签和数据内容的。显然,这就是我们日常处理数据的时候,最喜欢用的方法:表格。

    数据框的赋值通过函数data.frame()完成。很简单,日后提到的时候,一看就懂。

    表格里的内容当然也可以调用,但似乎没有前两个那么直观。方法如下:

    > States$pop
      #数据框名后加上美元符号"$",接列标签名,就能调用列。输出结果是一个向量
     [1]  4041   550  3665  2351 29760  3294  3287   666   607 12938  6478
    [12]  1108  1007 11431  5544  2777  2478  3685  4220  1228  4781  6016
    [23]  9295  4375  2573  5117   799  1578  1202  1109  7730  1515 17990
    [34]  6629   639 10847  3146  2842 11882  1003  3487   696  4877 16987
    [45]  1723   563  6187  4867  1793  4892   454
    > States[2]
      #用数字也可以调用列,但出来的则是一个砍掉了其他所有列的数据框
         pop
    AL  4041
    AK   550
    AZ  3665
    AR  2351
    CA 29760
    CO  3294
    

    日常操作中,我们一般会用attach()来锁定一个数据框。之后,只要直接输入列名称,就能调用列了。如下。

    > attach(States)
    > pop
        #效果相当于语句States$pop
     [1]  4041   550  3665  2351 29760  3294  3287   666   607 12938  6478
    [12]  1108  1007 11431  5544  2777  2478  3685  4220  1228  4781  6016
    [23]  9295  4375  2573  5117   799  1578  1202  1109  7730  1515 17990
    [34]  6629   639 10847  3146  2842 11882  1003  3487   696  4877 16987
    [45]  1723   563  6187  4867  1793  4892   454
    

    4.数据对象小结

    R的数据对象有很多种,我们现在先记住其中的三种。

    碗——向量(vector)

    多功能橱柜——列表(list)

    炒锅——数据框(data frame)

    并且,记住他们的结构,赋值方法,以及调用方法。

    其他的数据对象包括矩阵(matrix),数组(array),时间序列(ts)等等,以后再谈。

    值得一提的是,千万不要把数据对象和数据类型搞混。前者就是我们刚刚讲的容器的种类,而后者则是豆子的种类。

    数据类型包括数值型(numeric),字符型(character),缺失值(NA)等等,一看就懂。可以通过mode()函数检测数据类型:

    > x<-c(1,2,3.3,pi)
       #这些都是数字,当然是数值型
    > mode(x)
    [1] "numeric"
    > y<-c("thanks","for","dian","zan")
      #双引号或单引号括起来的任何东西,都是字符型
    > mode(y)
    [1] "character"
    > z<-c(1,2,3,"oops")
      #然而一个向量不能同时存在数值和字符元素。如果你加了一个字符型进去,整个向量的所有元素都会自动加上双引号,变成字符型。
    > mode(z)
    [1] "character"
    

    美好的一天,再写下去可能看官们就要睡着了。(你们是不是已经忘掉了标题中的“几分钟”呢?哈哈哈哈)

  • 相关阅读:
    Python程序中的线程操作-concurrent模块
    python程序中的进程操作-进程间的数据共享
    有几个消费者就需要发送几次结束信号
    python进程池
    Python程序中的线程操作-concurrent模块
    Python程序中的线程操作-线程队列
    Python程序中的线程操作-守护线程
    进程操作-进程池
    进程池版socket并发聊天
    使用多进程请求多个url来减少网络等待浪费的时间
  • 原文地址:https://www.cnblogs.com/fengmao/p/7283505.html
Copyright © 2020-2023  润新知