第一章,R语言-基础知识

简介

R语言主要用于数据可视化与统计分析,当然现在也可以通过扩展包实现数据挖掘等算法。与Python相比,R语言相当于天生就加载了NumPy,SciPy,Pandas的大多数功能。现在来介绍一些R语言的基本知识。

正文


一,入门操作

1, 包

(1)下载包

install.packages(
c("xts", "zoo"),
lib = "some/other/folder/to/install/to",   # 用lib参数来改变包安装的地址
repos = "http://www.stats.bris.ac.uk/R/“   # 指定下载包的源
)

(2)加载包

library和require都可以载入包,但二者存在区别。
在一个函数中,如果一个包不存在,执行到library将会停止执行,require则会继续执行。
如下面的例子,require会返回 TRUE / FALSE

d = require(ggplot2)
d
[1] TRUE

如果需要加载的多个包可以用下面循环

pkgs <- c("lattice", "utils", "rpart")
for(pkg in pkgs)
{
library(pkg, character.only = TRUE)
}

(3)包相关的函数
第一章,R语言-基础知识_第1张图片

2,赋值

第一章,R语言-基础知识_第2张图片

3,查看变量的类型

第一章,R语言-基础知识_第3张图片

4,常用其他系统函数

第一章,R语言-基础知识_第4张图片

5,查看R的源代码,

  • 直接键入函数名称
  • 函数名.default
  • getAnywhere(函数名)
  • methods(函数名),查看依赖的其他函数

例如:

methods(AIC)
[1] AIC.default* AIC.logLik*
getAnywhere(AIC.default)

二,数据结构

R语言的数据对象从结构角度划分,可以分为向量、数组、矩阵、因子、列表和数据框六种。

其中,

  • 向量(以及因子)、数组、矩阵,必须是相同类型
  • 列表、数据框,可以是不同类型
  • 因子是特殊的向量,在字符型向量的基础上,还附加了level值,主要针对的是类别的值,或者有序的类别值,以及时间日期
  • 数组、矩阵中,不同维度长度要一致,而列表中长度可以不同

第一章,R语言-基础知识_第5张图片
1,向量

(1)定义

向量的元素可以是数值型、字符型、逻辑值型和复数型,甚至列表型。向量中可以包含一个元素,也可以包含多个元素。同一个向量中的数据类型应该相同。

R中的向量是连续存储的,因此不能插入或删除元素。如想添加删除元素,需要重新给向量赋值。

(2)快速创建向量

c(1, 1:3, c(5, 8), 13) #values concatenated into single vector
[1] 1 1 2 3 5 8 13

(3)建立空向量

vector("numeric", 5)  或 numeric(5)
## [1] 0 0 0 0 0

vector("complex", 5) 或 complex(5)
## [1] 0+0i 0+0i 0+0i 0+0i 0+0i

vector("logical", 5)  或 logical(5)
## [1] FALSE FALSE FALSE FALSE FALSE

vector("character", 5)  或 character(5)
## [1] "" "" "" "" ""

vector("list", 5)
## [[1]]
## NULL
##
## [[2]]
## NULL
##
## [[3]]
## NULL
##
## [[4]]
## NULL
##
## [[5]]
## NULL

⚠️ 注意:不要混淆下面几个类型
第一章,R语言-基础知识_第6张图片

(4)运用序列函数seq创建向量

seq(from = 1, to = 5, by =1)
seq_len(5)
NULL 1 2 3 4 5

seq_alone() 创建从1到输入的向量的长度

pp <- c("Peter", "Piper", "picked", "a", "peck", "of", "pickled", "peppers”)
for(i in seq_along(pp)) print(pp[i])     # 等价于 for(i in pp) print(i)
    ## [1] "Peter"
    ## [1] "Piper"
    ## [1] "picked"
    ## [1] "a"
    ## [1] "peck"
    ## [1] "of"
    ## [1] "pickled"
    ## [1] "peppers"

(5)向量的属性与方法

第一章,R语言-基础知识_第7张图片

2,字符串与因子

(1)字符串的操作
第一章,R语言-基础知识_第8张图片
(2)因子

因子属于字符型向量的一种,在dataframe中,分类变量会默认的转换成因子类型。

例子,

heights <- data.frame(
      height_cm = c(153, 181, 150, 172, 165, 149, 174, 169, 198, 163),
      gender = c(
        "female", "male", "female", "male", "male",
        "female", "female", "male", "male", "female"
      )
)

class(heights$gender)
[1] "factor"

(3)因子相关的属性与函数

第一章,R语言-基础知识_第9张图片

3,矩阵与数组

向量是一维度的,数组是多维度的,矩阵是二维的数组,是数组中的特例。

(1)创建
第一章,R语言-基础知识_第10张图片
(2)矩阵和数组的属性与方法

第一章,R语言-基础知识_第11张图片
4,列表与数据框

向量中的数据类型是必须是相同的,而对于列表list,值可以是不同类型的,可以复杂的嵌套所有数据结构。

data frame之于matrix,就像list之于vector,像是一个升级版,可以存储多种类型的数据(即每一列的数据类型可以不同)

  • list 可以看成是存储任何类型的vector
  • data.frame 可以看成是存储任何类型的 matrix

并且data frame 会自动把strings的数据自动转换成factors, 如不想,则额外规定属性
“stringsAsFactors=FALSE”

数据框是二维的列表,并且每列表示一个不同的非嵌套的列表,每列长度需要相同。

(1)创建list 列表

列表中,可以是向量、日期、矩阵、三角函数等等,长度可以不一致

a_list <- list(
    c(1, 1, 2, 5, 14, 42), 
    month.abb,
    matrix(c(3, -8, 1, -3), nrow = 2),
    asin
)

(2)创建数据框

data.frame(
x = letters[1:5],
y = y,
z = runif(5) > 0.5, row.names = NULL
)

(3)列表与矩阵的属性与方法

第一章,R语言-基础知识_第12张图片

三,环境与函数

1,环境

所有的变量创建出来后,都需要存在一个地方,这个地方就是环境。环境本身也像变量一样可以被操作,赋值到函数中。环境有一点想list列表一样,可以储存任何值,甚至环境与list是可以相互转换的。

R的环境系统实质上是存储在RAM内存中,并且R环境之间的关系并不是嵌套关系。而是更接近树形结构,每一个环境都与一个父环境相连,但这样的连结是单向的:我们可以很轻松的找到某个环境的父环境,却难以直接找到一个环境的子环境。因此R环境的树形结构不支持自上而下的搜索。
实际应用中,环境都是会自动创建的。此处讲解环境有助于我们对后续开发的理解,并且理解环境的作用域也是非常重要的。

第一章,R语言-基础知识_第13张图片

2,函数

(1)格式

R语言中的函数定义是很宽松的

function(x) {
    5*x
}

function(x) 5*x       # 放进一行写代码的时候,可以不用花括号

(2)无 return

在R语言中个,自定义的函数是不用写return的,系统会自动返回算出来的结果。

(3) 参数

函数的参数,一般不指定具体值,不过根据需要也可以指定值,并且可以配合一些默认的函数。

例子:

hypotenuse <- function(x=3, y=mean(x)) {
sqrt(x ^ 2 + y ^ 2)
}

(4)function相关的方法

第一章,R语言-基础知识_第14张图片

四,流程控制与循环

1,条件判断

(1)if else

If(){
          ## do something
} else if(){
          ## do something
}  else {
          ## do something
}

例子:

  if(TRUE) message("It was true!")
  ## It was true!

(2)向量化ifelse():

第一章,R语言-基础知识_第15张图片
(3)多条件判断switch
第一章,R语言-基础知识_第16张图片

2,循环

R语言中循环涉及到了三个主要函数 repeat, while, for。不过基于R语言向量化的思想,应该降低循环的适用。

(1)repeat

repeat会不断循环重复执行,知道遇到 break。所以repeat一般不会单独使用,要结合 next,break使用。

例子:

repeat
{
message(“Happy Groundhog Day!”)
action <- sample(
c(
“Learn French”,
“Make an ice statue”,
“Rob a bank”,
“Win heart of Andie McDowell”
), 1)
if(action == “Rob a bank”) {
message(“Quietly skipping to the next iteration”)
next
}
message("action = ", action)
if(action == “Win heart of Andie McDowell”) break
}

(2)while

while与repeat很像,不过是先判断是否要执行,然后再循环。

例子:

action <- sample(
      c(
        "Learn French",
        "Make an ice statue",
        "Rob a bank",
        "Win heart of Andie McDowell"
),
1
)
while(action != "Win heart of Andie McDowell") {
      message("Happy Groundhog Day!")
      action <- sample(
        c(
          "Learn French",
          "Make an ice statue",
          "Rob a bank",
          "Win heart of Andie McDowell"
),
1
)
      message("action = ", action)
    }

用到for的时候,一般是知道要循环几次或循环的范围的。
并且,for循环不局限于数字,还可以是字符型向量,逻辑型向量,列表。

例子:
x<- c(“a”,“b”,“c”,“d”)
for (i in 1:13) {
print x[i]
}

for (letter in x) {
print (letter)
}

(4)for + get()

对非向量集合的循环,运用get(), 获取对应名称的变量值

例子:

下面的 u,v 分别是两个不同的矩阵
第一章,R语言-基础知识_第17张图片
3, 高级循环-向量化

第一章,R语言-基础知识_第18张图片

五,输入与输出:I/O

1,读取数据
第一章,R语言-基础知识_第19张图片
read.table(),参数如下

第一章,R语言-基础知识_第20张图片

2,保存数据

第一章,R语言-基础知识_第21张图片

你可能感兴趣的:(【R语言】)