前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >入门 | 简易指南带你启动 R 语言学习之旅

入门 | 简易指南带你启动 R 语言学习之旅

作者头像
机器之心
发布2018-05-10 11:18:10
1.9K0
发布2018-05-10 11:18:10
举报
文章被收录于专栏:机器之心

选自TowardsDataScience

作者:Vihar Kurama

机器之心编译

参与:刘晓坤、许迪

R 语言是结合了 S 编程语言的计算环境,可用于实现对数据的编程;它有很强大的数值分析工具,对于处理线性代数、微分方程和随机学的问题非常有用。通过一系列内建函数和库,你可以用 R 语言学习数据可视化,特别是它还有很多图形前端。本文将简单介绍 R 语言的编程基础,带你逐步实现第一个可视化案例。

代码地址:https://github.com/aaqil/r-lang-fundamentals

R 语言最近刚刚拥有了 TensorFlow 接口,目前最好的 R 语言版本是 R Studio。在学习之前,你需要了解一下 R 语言本身。

为什么要学习 R 语言?

  • R 很灵活;
  • R 很强大;
  • R 不仅是个统计计算工具包,它还是一门编程语言;
  • R 可以针对问题的形式设计程序;
  • R 可以高效地处理和存储数据。

R 语言的代码通用性较好,微调任务后只需要再微调代码就可以直接应用。

R 安装

选择你喜欢的 CRAN 镜像进行安装:https://cran.r-project.org/mirrors.html

R Studio

R Studio 是很高效的版本,它包括一个代码编辑器、调试和可视化工具。它是一个集成开发环境,包括一个控制台、支持直接代码执行的语法高亮显示编辑器,以及绘图、历史查询、调试和工作区管理的工具。

R Studio 下载地址:https://www.rstudio.com/products/rstud

R Studio 快照

交互使用 R 语言

成功安装 R 语言之后,在终端或 shell 里点击「R」启动交互式 shell。

你可以将 R shell 当成计算器使用,执行简单的数学,甚至高级的机器学习算法。

执行以下命令退出 R 程序:

代码语言:javascript
复制
> q()

你可以点击「y」保存工作区会话,如果直接点击「n」,则不保存直接返回终端/shell。

我们从在 R 交互式 shell 中输出「Hello World!」开始学习。

在 R 中我们使用 print() 函数返回参数中给定的字符串:

代码语言:javascript
复制
$R
> print("Hello World!")
[1] "Hello World!"
>

R 语言的命令

R 语言支持命令,而这些命令会被解释器忽略。

以下是一些 R 语言的命令的例子:

代码语言:javascript
复制
# This is a comment in R
# print("This doesn't work")

变量

R 语言的变量可以保存一个原子向量(atomic vector)、一组原子向量或多个 R 对象的组合。R 语言的命名区分大小写。在为数据结构命名的时候,我们需要遵循以下规则:

以. 起始的命名是系统命名,并且使用 ls() 函数时这些命名不总是可见。

代码语言:javascript
复制
a <- 3

上面的代码声明了一个变量「a」并分配了值 3。

typeof() 函数返回变量的数据类型。

代码语言:javascript
复制
type(a)
[1] "double"

R 语言的数据类型

numeric(实数或十进制数):十进制值在 R 语言中被称为 numeric,是默认的计算数据类型。

此外还包括 integer(整数)、charater(字符串)、logical(逻辑值)、complex(复数)等,以下是这些数据类型的定义代码示例:

代码语言:javascript
复制
a <- 3 
# Numerical
print(a)
typeof(a)

name <- "Stark"
# Character
print(name)
typeof(name)

holiday <- TRUE
# Logical
print(holiday)
typeof(holiday)

distance <- 1 + 4i
# Complex
print(distance)
typeof(distance)

使用命令「Rscript filename.R」在 shell 上执行 R 文件。

代码语言:javascript
复制
[1] 3
[1] "double"
[1] "Stark"
[1] "character"
[1] TRUE
[1] "logical"
[1] 1+4i
[1] "complex"

注意:R 语言的字符串是 Character 类型的。

算术运算

R 语言可以执行所有基本的算术运算,例如加、减、乘、除等。

代码语言:javascript
复制
# Addition
sum = 4+2     
print(sum)

# Subtraction
diff = 6-5 
print(diff)

# Multiplication
product = 7*45 
print(product)

# Division
div = 50/6 
print(div)

# Remainder
rem = 3%%8     
print(rem)

# Quotient.
q = 5%/%3   
print(q)

# Power 
power = 5^3
print(power)
代码语言:javascript
复制
[1] 6
[1] 1
[1] 315
[1] 8.333333
[1] 3
[1] 1
[1] 125

R 语言中的数据结构

原子向量

在 R 语言中,向量是最常用的数据结构。向量是相同类型的数据元素的序列。向量成员的正式名称是成分(component)。向量的元素的数据类型可以是 character、logical、integer 或 numeric。

我们使用 vector() 函数创建一个空向量,以下代码展示了如何声明一个向量:

代码语言:javascript
复制
x <- vector()
> character(5)
[1] "" "" "" "" ""

列表

R 语言的列表作为容器,是包含其它对象的通用向量。和原子向量不同,列表中的变量不局限于单一的数据类型,可以包含任意的数据类型的混合。一个列表可以包含其它列表。

R 语言中的列表可以用 list() 函数创建。

代码语言:javascript
复制
my_list <- list("Red", TRUE, 51.23)
代码语言:javascript
复制
list_1 <- list("Red", TRUE, 51.23)
print(list_1)

# Merging the lists

list_2 <- list(1,2,3)
list_3 <- list("Sun","Mon","Tue")

# Merge the two lists
merged.list <- c(list_2,list_3)

# Print the merged list.
print(merged.list)
代码语言:javascript
复制
[1] "Red"
[[2]]
[1] TRUE
[[3]]
[1] 51.23
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
[[4]]
[1] "Sun"
[[5]]
[1] "Mon"
[[6]]
[1] "Tue"

矩阵

在 R 语言中,矩阵是一种特殊类型的向量。矩阵是数据元素以二维矩形排布的集合,矩阵有行和列。

现在我们创建一个 2x2 矩阵,使用 matrix 函数并以行和列作为参数。行数以 nrow 表示,列数以 ncol 表示。

代码语言:javascript
复制
my_matrix <- matrix(nrow = 2, ncol = 2)
代码语言:javascript
复制
my_martix <- matrix(nrow = 8, ncol = 4)
# It creates a matrix with 8 rows and 4 cloumns.
# But initially they all are empty(NA).

# These are used to enter the data into the matrix.
# Here c() function is used to concatenate the data.
# In the below example the data is filled by column wise.

my_martix[, 1] <- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55)
my_martix[, 2] <- c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5,20.6, 21.5)
my_martix[, 3] <- c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8,32.5,34)
my_martix[, 4] <- c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6,15.6, 15.7)

print(my_martix)
代码语言:javascript
复制
     [,1] [,2] [,3] [,4]
[1,] 59.0 22.3 31.2  9.5
[2,] 55.0 19.7 30.4 13.8
[3,] 53.5 20.8 30.6 14.8
[4,] 55.0 20.3 30.3 15.2
[5,] 52.5 20.8 30.3 15.5
[6,] 57.5 21.5 30.8 15.6
[7,] 53.0 20.6 32.5 15.6
[8,] 55.0 21.5 34.0 15.7

数据帧(data frame)

数据帧是 R 语言里最常用的数据结构之一。数据是由带有行和列的数据表格表示的。

我们通常在数据帧里读取一个 csv 文件,使用 read.csv() 或 read.table() 函数,然后把 csv 文件的名字作为参数输入函数里来实现的。

我们也可以用 data.frame() 函数来创建一个数据帧。

代码语言:javascript
复制
> df <- data.frame(id = letters[1:5], x = 1:10, y = rnorm(10))
> df
> ##    id  x        y
> ## 1   a  1 -1.37593
> ## 2   b  2  0.47094
> ## 3   c  3 -0.16046
> ## 4   d  4 -1.36914
> ## 5   e  5  0.39763

这里有几个重要的函数,应用到数据帧得出其结构信息等。

  • head() 用来看前 6 行
  • tail() 用来看后 6 行
  • dim() 用来看维度
  • nrow() 行的数量
  • ncol() 列的数量
  • str() 每一列的结构

因子(factor)

因子是带标签的整数。因子看起来像字符矢量,但实际上是整数,当你把它们当成字符来对待时,需要特别谨慎。一些字符处理方法会强制把因子转换成字符,而其他的字符处理方法会报错。

因子可以用 factor() 函数创建。输入一般是字符矢量。

代码语言:javascript
复制
> x <- factor(c("yes", "no", "no", "yes", "yes"))
> x
[1] yes no  no  yes yes
Levels: no yes
# table(x) will return a frequency table.

控制结构

以下是控制函数的脚本执行流程的常用结构,包括:

1. if, else

2. for

3. while

4. repeat

5. break

if-else

我们经常需要可以检查一个程序的状态和改变这个程序的行为的功能。条件语句可以提供这样的功能,最简单的形式是 if 语句。

代码语言:javascript
复制
if (condition) {
    # do something
} else {
    # do something else
}

例子

代码语言:javascript
复制
x <- 1:15
if (sample(x, 1) <= 10) {
    print("x is less than 10")
} else {
    print("x is greater than 10")
}

for 循环

R 语言里的 for 循环可以在任何列表或矢量中执行。

代码语言:javascript
复制
for (i in 1:5) {
    print(i)
}

上述代码是在 R 语言里声明 for 循环的例子,for 循环让循环变量 i 在给定的范围内迭代。

代码语言:javascript
复制
1
2
3
4
5

几种实现 for 循环的方法。

代码语言:javascript
复制
x <- c("apples", "oranges", "bananas", "strawberries")

# Prints the list items with the index.
for (i in x) {
    print(x[i])
}

for (i in 1:4) {
    print(x[i])
}

for (i in seq(x)) {
    print(x[i])
}

# Inline
for (i in 1:4) print(x[i])
代码语言:javascript
复制
[1] NA
[1] NA
[1] NA
[1] NA
[1] "apples"
[1] "oranges"
[1] "bananas"
[1] "strawberries"
[1] "apples"
[1] "oranges"
[1] "bananas"
[1] "strawberries"
[1] "apples"
[1] "oranges"
[1] "bananas"
[1] "strawberries"

while

一个 R 语言里的 while 循环会反复的执行目标语句,只要给定的条件一直是真。不像 for 循环,while 循环不会确定循环次数,而会一直跑直到条件不满足。

while 循环句法

代码语言:javascript
复制
while(condition){
    statements
    iteration
}

这是一个例子,我们实现一个简单的 while 循环。

代码语言:javascript
复制
i <- 1
while (i < 5) {
    print(i)
    i <- i + 1
}
代码语言:javascript
复制
1
2
3
4
5

repeat 和 break

一个 repeat 循环是用来反复执行一段代码的,其中没有检查条件然后退出的机制。

repeat 和 break 的句法

代码语言:javascript
复制
repeat{
    condition
        statements
        break
}

现在,让我们用 repeat 和 break 来输出前五个数字。

代码语言:javascript
复制
x <- 1
repeat {
    print(x)
    x = x+1
    if (x == 6){
        break
    }
}
代码语言:javascript
复制
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

函数

在任何编程语言中函数的主要作用就是可复用性。函数是一系列声明的组合以执行特殊的任务。在 R 语言里有很多内建的函数,例如 sum()、min()、max()、mean() 等。

R 语言中声明函数的句法

代码语言:javascript
复制
function_name <- function(arg_1, arg_2, ...) {
    function body 
}

现在让我们创建一个函数来输出一系列的数字。

代码语言:javascript
复制
my_function <- function(a) {
  for(i in 1:a) {
    b <- i^3
    print(b)
  }
}    

# Now call the function supplying 6 as an argument
my_function(6)
代码语言:javascript
复制
216

R 语言里的可视化

数据可视化是对决策至关重要的参考。R 语言为了创建数据储存和可视化儿提供了最好的内置函数和库。

现在,让我们用 R Studio 里的 ggplot2 来创建一个简单的线图,我们需要安装 ggplot2 包,你会在左角找到控制台,执行命令安装包(「package_name」):

代码语言:javascript
复制
> install.packages("ggplot2")

我们现在导入一个内置的数据集(mpg),然后画一个简单的图。

关于 mpg 数据集:这是一个关于燃料经济的数据集,包含了从 1999 年到 2008 年 38 种流行车款的数据。

1. 一个 234 行和 11 个变量的数据帧;

2. displ-发动机排量,以升为单位;

3. hwy-高速公路耗油量,英里每加仑。

代码语言:javascript
复制
library(ggplot2)
# Plots mpg dataset's with Xaxis - displ and Yaxis - hwy

# We can also specify the color pallete by sending the colour argument.

ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()

原文链接:https://towardsdatascience.com/r-lang-zero-to-hero-c59a9f66841c

本文为机器之心编译,转载请联系本公众号获得授权。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档