前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R语言入门

R语言入门

作者头像
若与
发布于 2018-04-25 05:00:20
发布于 2018-04-25 05:00:20
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

最近在复习python的科学计算,突然心血来潮,想看看R的数据处理和python的区别在哪,所以就有了这篇文章。

R语言简介

四十多年前, R 语言的始祖诞生了 , John Chambers 在贝尔实验室中开发出S语言 ,用于快速地进行数据探索, 统计分析和可视化 。十几年后 , 新西兰奥克兰大学的 Robert Gentleman 和 Ross Ihaka 在 S 语言的基础上发明了 R 语言 。

R 语言流淌着统计学的血液 , 它内置了海量的统计函数 ,使用者可以利用其对数据进行快速交互分析 。 同时作为一门图灵完备的解释性语言 , R 的使用者比 SAS , SPSS 等统计软件的使用者拥有了更大程度的自由。

进入 21 世纪后 ,由于个人计算机的普及和统计学科的发展 , R 社群得以进一步发展 , 一些富有想象力的优秀工具涌现出来 。 如果把 R 语言比作一辆车的话 , Rstudio 的出现使得我们有了信息更加丰富的仪表盘 , dplyr , data.table 等等数据处理的包加强了引擎 , ggplot , shiny 等等可视化的工具使得车的外型更好看。

与大多用于工程实践的编程语言相比 , R 语言更像是一个灵巧的研究工具 ,在处理大量数据 , 性能方面比较薄弱。但是与其他工具交互就能漂亮地解决问题 , 例如与 Spark 配合 (sparkR) 解决数据量较大的情况 , 与 C++(Rcpp) 配合可以解决性能不足的问题。

早在五十多年前 , John Tukey 就在论文 "The Future of Data Analysis"[1] 中发表了这样的看法:统计学不应该只是关于统计推断的数学理论,而应该和现实世界联系起来,成为一种“科学”。为了实现这样的目标,需要有收集和整理数据、分析和解释数据的技术,并且把实践当成检验理论的标准。

R语言及其生态作为连接现实世界中的数据和数学模型的桥梁,正在社群的努力下一步一步地把这些想法具体化。

让我们进入 R 语言的世界!

R语言的安装

ubuntu下安装

1、直接到官网上下载安装包(tar.gz),然后依次安装即可。 2、在网速可以的情况下,利用在apt-get安装是一种更为方便的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update
sudo apt-get install r-base
sudo apt-get install r-base-dev

MAC下安装

mac安装更简单 下载R安装包,完成后点安装。

R语言基本数据结构

下面用 R 的解释器来熟悉一下 R 语言的基本数据结构

首先让我们先进入 R 环境下 我是在mac操作环境下的,ubuntu的是一样的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 youdi@liangchangyoudeMacBook-Pro  ~R

R version 3.4.1 (2017-06-30) -- "Single Candle"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)

R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用'license()''licence()'来看散布的详细条件。

R是个合作计划,有许多人为之做出了贡献.'contributors()'来看合作者的详细情况
用'citation()'会告诉你如何在出版物中正确地引用RR程序包。

用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
用'help.start()'通过HTML浏览器来看帮助文件。
用'q()'退出R.
>
>

向量

向量是 R 语言中最基本的数据类型,在 R 中没有单独的标量(例如 1 本质上是 c(1)) 。

赋值

R 中可以用 = 或者 <- 来进行赋值 , <-的快捷键是 alt + - 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a <- c(4,5,6)
> a
[1] 4 5 6

筛选

我们可以用下标来筛选,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[1:2]
[1] 4 5
> a[3]
[1] 6

注意 R 语言的下标是从 1 开始的。

当然我们也可以用逻辑进行筛选,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[a>4]
[1] 5 6
> a[a>5]
[1] 6

为了了解这个式子的原理,我们先看看 a>4 是什么

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a>4
[1] FALSE  TRUE  TRUE

我们可以看到这是一个布尔值构成的向量,我们在用这个布尔值 做下标时只会选出答案为 TRUE 的值。 另外,负数下标表示不选这个这些下标,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[-1]
[1] 5 6
> a[-2]
[1] 4 6
> a[-3]
[1] 4 5
> a[-4]
[1] 4 5 6

合并向量

c() 可以合并向量,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> c(a[1] , 3 , a[2:3] , 1)
[1] 4 3 5 6 1

循环补齐

向量有个比较有趣的性质,当两个向量进行操作时,如果长度不等, 长度比较短的一个会复制自己直到自己和长的一样长。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> b
[1] 1 2 3 4 5 6 7 8
> a
[1] 4 5 6
> a + b
[1]  5  7  9  8 10 12 11 13
Warning message:
In a + b : 长的对象长度不是短的对象长度的整倍数
> b <- c(1,2,3,4,5,6,7,8,9)
> a + b
[1]  5  7  9  8 10 12 11 13 15

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> length(b)
[1] 9
> which.max(b)
[1] 9
> which.min(b)
[1] 1

不懂就使用help()查看命令手册

矩阵

矩阵,从本质上来说就是多维的向量,我们来看一看

我们如何新建一个矩阵。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a <- matrix(c(1,2,3,4,5,6,7,8,9), nrow=3)
> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

matrix有很多参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
help(matrix)

Usage:

     matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
            dimnames = NULL)

     as.matrix(x, ...)
     ## S3 method for class 'data.frame'
     as.matrix(x, rownames.force = NA, ...)

     is.matrix(x)

筛选矩阵

与向量相似,我们可以用下标来筛选矩阵,

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a[1, 2:3]
[1] 4 7

可以看到结果退化成了一个向量

线性代数

当我们对两个矩阵相乘,我们得到的结果是

对应元素两两相乘的结果,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> a * a
     [,1] [,2] [,3]
[1,]    1   16   49
[2,]    4   25   64
[3,]    9   36   81

而这不是我们想要的矩阵乘法,在 R 中我们在乘法旁边加两个

百分号来做矩阵乘法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> a%*%a
     [,1] [,2] [,3]
[1,]   30   66  102
[2,]   36   81  126
[3,]   42   96  150

此外,我们可以用 t() 来求矩阵的转置 , 用 solve() 来求矩阵的逆。

数据框

数据框类似矩阵,与矩阵不同的是,数据框可以有不同的数据类型。

一般做数据分析,我们把一个类似 excel 的表格读入 R ,默认的格式

就是数据框 , 可见数据框是一个非常重要的数据结构。

一般来说我们需要分析的数据,每一行代表一个样本,每一列代表一个

变量。

下面我们用 R 内置的数据集 iris 来看一看数据框的使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> data("iris")
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> tail(iris)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica
> tail(iris, 20)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
131          7.4         2.8          6.1         1.9 virginica
132          7.9         3.8          6.4         2.0 virginica
133          6.4         2.8          5.6         2.2 virginica
134          6.3         2.8          5.1         1.5 virginica
135          6.1         2.6          5.6         1.4 virginica
136          7.7         3.0          6.1         2.3 virginica
137          6.3         3.4          5.6         2.4 virginica
138          6.4         3.1          5.5         1.8 virginica
139          6.0         3.0          4.8         1.8 virginica
140          6.9         3.1          5.4         2.1 virginica
141          6.7         3.1          5.6         2.4 virginica
142          6.9         3.1          5.1         2.3 virginica
143          5.8         2.7          5.1         1.9 virginica
144          6.8         3.2          5.9         2.3 virginica
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica

我们用 data 函数调入了 iris 这个数据集 , 然后用 head 函数来看一看这个数据

的前几行 , tail 函数来看一看这个数据

的后几行 可以看到有 sepal 的长度,宽度,petal 的长度和宽度,还有一个变量

Species 来描述样本的类别。

我们可以用 summary 函数来对数据集做大致的了解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> sum
sum                 summary.Date        summary.POSIXlt     summary.connection  summary.default     summary.glm         summary.manova      summary.proc_time   summary.srcref      summary.table
summary             summary.POSIXct     summary.aov         summary.data.frame  summary.factor      summary.lm          summary.matrix      summary.srcfile     summary.stepfun     summaryRprof
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300
 Median :5.800   Median :3.000   Median :4.350   Median :1.300
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500
       Species
 setosa    :50
 versicolor:50
 virginica :50

可以直观地看到每个变量的信息,对于几个数值变量,我们可以看到最小值,中位数等等统计信息。而对于 Species 这个分类变量,我们看到的是计数信息。

筛选数据框与矩阵相似,都可以通过数字下标来获取子集,不同地是因为数据框有不同的列名,我们也可以通过列名来获取某一特定列,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> iris$Species
  [1] setosa     setosa     setosa     setosa     setosa     setosa
  [7] setosa     setosa     setosa     setosa     setosa     setosa
 [13] setosa     setosa     setosa     setosa     setosa     setosa
 [19] setosa     setosa     setosa     setosa     setosa     setosa
 [25] setosa     setosa     setosa     setosa     setosa     setosa
 [31] setosa     setosa     setosa     setosa     setosa     setosa
 [37] setosa     setosa     setosa     setosa     setosa     setosa
 [43] setosa     setosa     setosa     setosa     setosa     setosa
 [49] setosa     setosa     versicolor versicolor versicolor versicolor
 [55] versicolor versicolor versicolor versicolor versicolor versicolor
 [61] versicolor versicolor versicolor versicolor versicolor versicolor
 [67] versicolor versicolor versicolor versicolor versicolor versicolor
 [73] versicolor versicolor versicolor versicolor versicolor versicolor
 [79] versicolor versicolor versicolor versicolor versicolor versicolor
 [85] versicolor versicolor versicolor versicolor versicolor versicolor
 [91] versicolor versicolor versicolor versicolor versicolor versicolor
 [97] versicolor versicolor versicolor versicolor virginica  virginica
[103] virginica  virginica  virginica  virginica  virginica  virginica
[109] virginica  virginica  virginica  virginica  virginica  virginica
[115] virginica  virginica  virginica  virginica  virginica  virginica
[121] virginica  virginica  virginica  virginica  virginica  virginica
[127] virginica  virginica  virginica  virginica  virginica  virginica
[133] virginica  virginica  virginica  virginica  virginica  virginica
[139] virginica  virginica  virginica  virginica  virginica  virginica
[145] virginica  virginica  virginica  virginica  virginica  virginica
Levels: setosa versicolor virginica

我们可以用 names() 函数来获取数据框的列名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"

并可以通过为其赋值改变列的名字。

列表

列表是一种递归式的向量,我们可以用列表来存储不同类型的数据,比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> l <- list(name="youdi" , height=176 , weight = 67, man =  TRUE)
> l
$name
[1] "youdi"

$height
[1] 176

$weight
[1] 67

$man
[1] TRUE

列表有多种索引方式,可以用如下方式获取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> l$name
[1] "youdi"
> l$height
[1] 176
> l$man
[1] TRUE
> l[1]
$name
[1] "youdi"

> l[[2]]
[1] 176
> l[['man']]
[1] TRUE

上面的内容涵盖了 R 语言最基本的数据结构.

R 语言学习优秀资源

网络资源

DataCamp : 一个提供云端R语言解释器的网站 ,提供了多门与数据科学有关的课程,可以借助此网站快速上手。

统计之都 : 国内质量最高的统计网站,有一些关于统计和R语言的优秀博客以及与R有关的会议通知。

肖凯博客(需访问外国网站): 很有质感的博客,有大量 R 语言应用的案例。

数据科学相关书籍

R for data science : 由 Hadley Wickham 合作编写的 2017 年出版的书籍 ,主要介绍的 tidyverse 生态 , tidyverse 中包括了 dplyr(用于数据处理) , ggplot(用于画图)等包,大幅增强了 R 语言的表现力 , 有免费的在线版本。

R 语言实战 : 一本从统计角度介绍 R 语言的书籍 ,较为简单 , 适合快速翻阅。

An Introduction to Statistical Learning : 斯坦福统计系几位教授出版的统计学习书籍,对统计学习进行了清晰细致的讲解 , 书有开源版本 ,并且在Stanford Lagunita上有配套课程

Machine Learning For Hackers : 使用机器学习解决问题的一本书 , 有很多有趣的案例 。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.10.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 中文编码
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
小小工匠
2021/08/16
1.8K0
python shell 中文乱码解决
python的默认文件编码是ASCll,当文件包含中文的时候,如果用python shell测试可能会出现以下错误:
py3study
2020/01/07
1.8K0
python中文编码教程
如何用 Python 输出 "Hello, World!",英文没有问题,但是如果你输出中文字符"你好,世界"就有可能会碰到中文编码问题。
想偷懒的程序员
2019/11/01
1K0
编码 | Python竟然有隐藏功能,只有极少人知道!
产生这样结果的原因是Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
潘永斌
2020/01/13
4720
编码 | Python竟然有隐藏功能,只有极少人知道!
彻底搞懂 Python 编码
因为中文的特殊编码,导致 Python2 和 Python3 使用过程中的各种编码问题,如果不清楚其中的关联关系,那么这就一直是个大坑,不是懵逼就还是懵逼,所以就目前碰到的情况彻底梳理下 Python2 和 Python3 中编码的关系和区别,以作备忘。
sylan215
2020/03/03
5380
python开头的coding设置
写完python代码运行时,报类似SyntaxError: Non-ASCII character ‘\xe5’ in file *.py, 基本可以断定,python文件开头未设置coding=utf-8。
py3study
2020/01/06
1.9K0
python的中文处理问题
SyntaxError: Non-ASCII character '\xe6' in file test_zh.py on line 6, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
py3study
2020/01/13
4000
python未完结
[root@localhost ~]# python --version      查看python版本
py3study
2020/01/13
2720
让python支持中文
  在python脚本中默认不支持中文字符,但是我们在写程序的时候经常会用到一些注释,有些注释又是中文的,但是在执行的时候却报错,如下:
py3study
2020/01/13
1.3K0
python输入输出及编码和注释
# 1.py # # 对应python中文编码问题如下加上 #coding=utf-8 或者 # -*- coding: utf-8 -*- #coding=utf-8 # 对于python的注释有两种 # 一个是用 # 注释 一个是多行注释用 ''' ''' 下面有例子 ''' 这里是多行注释 ''' # 打印一个hello world # 注意文件一定要是utf8 无bom编码 不然会执行报异常的错误 异常错误如下:SyntaxError: Non-ASCII character '\xe6' in file 1.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details print 'hello world' # print 多个字符串用,号隔开,输出的时候用的空格隔开,如果不用,隔开,则输出的字符串是相连的 print 'this is a boy','jump','the lazy dog' print 'i am' 'boy' # 从命令行输入数据 test = raw_input() print '这里是打印输入结果:', test ''' 下面是这个是运行结果: hello world this is a boy jump the lazy dog i amboy 5 这里是打印输入结果: 5 '''
公众号-利志分享
2022/04/25
4710
零基础学Python(第二章 中文编码)
Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
红目香薰
2022/11/28
2360
Python、Unicode和中文
python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了。
py3study
2020/01/13
1.1K0
5.python中文编码
python到目前为止,一共有两个版本,分别是2.x和3.x版本,根据官方正式通知2020年停止对python更新和维护,距离今天还有110天左右,所以正在学习python的小伙伴应该暗中庆幸一波。
猿说编程[Python和C]
2020/01/13
8470
SyntaxError: Non-ASCII character ‘\xe5’ in file Test1.py on line 8, but no encoding declared; see
SyntaxError: Non-ASCII character ‘\xe5’ in file Test1.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
kirin
2020/12/07
1.2K0
python的str,unicode对象的encode和decode方法
python的str,unicode对象的encode和decode方法  python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]。  而python中的unicode对象应该才是等同于java中的String对象,或本质上是java的char[]。  对于 
bear_fish
2018/09/20
2K0
5.python中文编码
python到目前为止,一共有两个版本,分别是2.x和3.x版本,根据官方正式通知2020年停止对python更新和维护,距离今天还有110天左右,所以正在学习python的小伙伴应该暗中庆幸一波。
猿说编程[Python和C]
2020/03/12
1.3K0
5.python中文编码
python字符串编码及乱码解决方案
http://blog.csdn.net/pipisorry/article/details/44136297
全栈程序员站长
2022/09/06
2.2K0
python字符串编码及乱码解决方案
python print输出中文
python print输出中文: 1、直接通过下面的语句输出: print "你好" 会出现乱码: C:\Python27\python.exe D:/pythonDemo/helloworld/hello.py   File "D:/pythonDemo/helloworld/hello.py", line 3 SyntaxError: Non-ASCII character '\xc4' in file D:/pythonDemo/helloworld/hello.py on line 3,  but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 搜索了一下,很多人都说是编码问题,需要修改文件的编码:如下所示: # coding=gbk //注意:coding=gbk 等号两边不能有空格 print "你好" 2、这就要求你的文件也是GBK编码,那么在那里设置呢? 因为我是在IDE里编写代码,可以如下图所示进行设置:
py3study
2020/01/07
2.1K0
ubuntu下python中文编码的设置
修改/usr/lib/python2.7目录下的sitecustomize.py文件,添加内容
py3study
2020/01/07
1.7K0
ubuntu下python中文编码的设置
从零开始学python
windows: 1.下载安装包 https://www.python.org/downloads/
老马的编程之旅
2022/06/22
6830
从零开始学python
相关推荐
Python 中文编码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档