zoukankan      html  css  js  c++  java
  • 【R语言入门】R语言中的变量与基本数据类型

    说明

    在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识。

    本篇将主要介绍 R 语言的基本操作、变量和几种基本数据类型,好对 R 语言的使用方法有一个基本的概念。通过本篇的学习,你将了解到:

    1. R 语言有哪些基本操作
    2. 什么是变量,以及如何给变量赋值
    3. R 语言有哪些基本数据类型,如何确定变量的数据类型

    R 语言的基本操作

    R 语言的默认提示符是 > ,它表示正在等待输入命令,每次输入命令后敲击回车即可执行当前命令。

    R 语言支持的基本操作主要有加、减、乘、除、取余和幂运算,对应的运算符分别为:+、-、*、/、%%、^。

    加减乘除就不必多说了,但有一点需要提一下,跟许多语言不一样的是,R 语言中,除法运算得到的不是整数部分,而是包含小数部分的结果。

    > 9/2
    [1] 4.5
    > 9/4
    [1] 2.25
    > 11/3
    [1] 3.666667
    

    取余运算的含义是计算整除后的余数:

    > 9 %% 2
    [1] 1
    > 9 %% 4
    [1] 1
    > 9 %% 3
    [1] 0
    > 11 % 4
    错误: unexpected input in "11 % 4"
    

    在使用时需要注意的是有两个百分号组成,输入错误则会得上上述错误提示。

    幂运算跟数学中的幂运算含义一致,2^3 代表的是2的3次幂:

    > 2 ^ 3
    [1] 8
    > 3 ^ 2
    [1] 9
    > 2 ^ 10
    [1] 1024
    > 2 ^ 100
    [1] 1.267651e+30
    

    R 语言中的变量

    在使用 R 语言时,我们通常很难一步到位得到最终的结果,需要进行一些复杂的计算。这时我们便需要使用变量来存放计算得到的中间结果。

    R 语言中,可以将变量想象成一个盒子,我们可以将任何数据暂存到这个盒子里,但同一时刻,这个盒子只能保存一个数据,如果被多次赋值,则只会保存最后一次放入的数据。

    R 语言中的赋值符号是 ->,虽然也可以使用 = 进行赋值,但强烈建议不要这样做,这样不仅显得不专业,而且在一些情况下会出现问题。

    > x <- 3
    > x <- 4
    > x <- 9
    > x
    [1] 9
    

    R 语言中的变量不需要事先声明,直接使用即可。如果使用了一个之前没有出现过的变量,则会创建一个新的变量。R 语言中变量是区分大小写的,xX 是两个不同的变量。

    > X
    错误: 找不到对象'X'
    > X <- 1
    > X <- 3
    > X
    [1] 3
    > x
    [1] 9
    

    变量都是有名字的,比如xystu_score,变量的命名必须满足以下规则:

    1. 只能使用字母(区分大小写)、数字、“_”(下划线)、“.”(英文句号),不能有中文、空格和其它特殊字符存在
    2. 不能以数字、下划线开头,开头必须是英文字母或者点
    3. 可以以点号开头,但点号后面的符号不能是数字

    R 语言中,如果非要搞一些骚操作,用一些奇怪的变量名,也不是不可以,需要用反引号来包裹。

    > `* 90` <- 10
    > `* 90`
    [1] 10
    > `变量` <- 20
    > `变量`
    [1] 20
    

    当然,不建议这样做,变量取名最好简单且有意义,这样可以减少与其他人的沟通成本以及日后的理解成本。

    R 语言中的基本数据类型

    R 语言中主要数据类型有:向量、列表、矩阵、因子、数据框、数组。这些会在后面的文章中进行介绍,本篇只介绍基本的几种数据类型。

    1. 逻辑型(logical)

    逻辑型数据有两种可能的值,TRUEFALSE

    > v <- TRUE
    > class(v)
    [1] "logical"
    > y <- FALSE
    > class(v)
    [1] "logical"
    > y <- false
    错误: 找不到对象'false'
    

    class 函数可以获取变量的类型信息,可以看到,变量 vy 都是 logical 类型。需要注意的是 TRUEFALSE 必须全部大写,否则会出现上面的错误提示。

    2. 数值型(numeric)

    R 语言中数字的默认类型为数值型,在运算时需要注意其精度问题,当整数部分大于等于7位时,将舍弃小数部分,当整数部分小于7位时,与小数部分一起最多保留7位数字。

    > i <- 10
    > class(i)
    [1] "numeric"
    > j <- 11.1
    > class(j)
    [1] "numeric"
    > k <- 1.1234567890
    > class(k)
    [1] "numeric"
    > k
    [1] 1.123457
    > k <- 123456789.123456789
    > k
    [1] 123456789
    > k <- 1234567.123456789
    > k
    [1] 1234567
    > k <- 123456.123456789
    > k
    [1] 123456.1
    

    3. 整数型(integer)

    R 语言中,整数型需要使用数字+L来表示,如:2L11L-10L

    > i <- 1L
    > class(i)
    [1] "integer"
    > j <- 22L
    > class(j)
    [1] "integer"
    > k <- -10L
    > class(k)
    [1] "integer"
    

    4. 字符型(character)

    R 语言中字符型即字符串类型,通常为用单引号或双引号包围的字符串。

    > name <- "Frank"
    > class(name)
    [1] "character"
    > doc_name <- "study.mp4"
    > class(doc_name)
    [1] "character"
    

    5. 复数型(Complex)

    R 语言是支持复数计算的,复数也是 R 语言的基本类型之一。

    > c1 <- 3 + 2i
    > class(c1)
    [1] "complex"
    > c2 <-6 - 3i
    > class(c2)
    [1] "complex"
    

    6. 原型(Raw)

    R 语言还有一种不太常见的基本数据类型,叫原型(raw)。raw 类型是直接使用其二进制内容来进行保存和使用的类型。

    > v <- charToRaw("Hello")
    > class(v)
    [1] "raw"
    > v
    [1] 48 65 6c 6c 6f
    

    如何判断变量的类型

    当我们拿到一个变量之后,如何判断它的数据类型呢?上面的例子中,其实已经有所提及,使用 class() 函数可以简单方便的查看变量的类型,但还有更简单的方式,为了判断某个变量x 保存的基本类型,可以用 is.xxx() 类函数,如is.integer(x), is.double(x), is.numeric(x), is.logical(x), is.character(x), is.complex(x), is.raw(x)。 其中 is.numeric(x)integerdouble 内容都返回真值。

    > is.character(s)
    [1] TRUE
    > is.character(v)
    [1] FALSE
    > is.raw(v)
    [1] TRUE
    > is.integer(i)
    [1] TRUE
    > is.numeric(i)
    [1] TRUE
    > is.complex(c1)
    [1] TRUE
    > is.integer(c1)
    [1] FALSE
    

    小结

    至此,本篇就告一段落了,相信通过本篇的学习,对 R 语言的基本数据类型能有一个整体的掌握,别忘了回顾一下之前的问题,这些你都了解了吗:

    1. R 语言有哪些基本操作
    2. 什么是变量,以及如何给变量赋值
    3. R 语言有哪些基本数据类型,如何确定变量的数据类型

    之后的篇章中,将会继续介绍 R 语言的各方各面,让 R 语言能为我们的数据分析提供更强力的支持!

  • 相关阅读:
    bzoj3306: 树(dfs序+倍增+线段树)
    bzoj1969: [Ahoi2005]LANE 航线规划(树链剖分)
    Codeforces 578B. "Or" Game(思维题)
    bzoj3251: 树上三角形(思维题)
    bzoj2006: [NOI2010]超级钢琴(堆+RMQ)
    bzoj4165: 矩阵(堆+hash)
    bzoj3007: 拯救小云公主(二分+并查集)
    Codeforces 582C. Superior Periodic Subarrays(数学+计数)
    Codeforces 585E. Present for Vitalik the Philatelist(容斥)
    Codeforces 585D. Lizard Era: Beginning(meet in the middle)
  • 原文地址:https://www.cnblogs.com/mfrank/p/14051513.html
Copyright © 2011-2022 走看看