R的基本计算

作为一款统计软件,R最重要的功能就是进行统计计算,这一节就和小伙伴聊一聊R的基本计算语句。

数学运算

R运行代码时,会调用计算机运行内存完成计算任务,因此R也可以实现常用的数学四则运算以及更进一步的复杂运算。

x + y      # 加法运算
x - y      # 减法运算
x * y      # 乘法运算
x / y      # 除法运算
x ** y     # 乘方(指数)运算(1)
x ^ y      # 乘方(指数)运算(2),开方运算的y为分数
sqrt(x)    # 开平方运算
abs(x)     # 求绝对值
x %% y     # 除法取余数
x %/% y    # 整除运算
exp(x)     # 自然指数运算
log(x,y)   # 以y为底的x的对数
log10(x)   # 常用对数
round(x,y) # x四舍五入保留y位小数
round(x)   # 取整函数,四舍六入五留双
ceiling(x) # x的向上取整
floor(x)   # x的向下取整
sin(x)     # 正弦函数
cos(x)     # 余弦函数
tan(x)     # 正切函数
asin(x)    # 反正弦函数
acos(x)    # 反余弦函数
atan(x)    # 反正切函数

以上就是一些常用的基本预算,还有一些衍生的运算,比如余切,正割,正矢函数等都可以通过上述基本运算的结合而实现。

逻辑运算

之前我们聊过R的对象包括逻辑值,因此R也能够进行相应的逻辑运算。

x | y   # 或运算
x & y   # 与运算
!x      # 非运算
x == y  # 相等
x > y   # 大于
x < y   # 小于
x >= y  # 大于或等于
x <= y  # 小于或等于

逻辑运算的结果是TRUE/FALSE的逻辑值,有时候可以通过逻辑运算来实现一些精妙的设计。比如对学生的成绩单进行分析,可以运用逻辑运算判断学生更加擅长哪些科目。

向量运算

在上一篇中我们提到,向量也是R的存储对象之一。对于一串数据的处理,如果采取循环的方式,运算效率会非常低,因此R有特定的向量化计算,有助于我们简化代码,提升计算速度和工作效率。

首先,我们要创建一个向量vector

> vector <- c(1:10)
> print(vector)
[1] 1 2 3 4 5 6 7 8 9 10

这里1:10表示一个从1到10的10位整数数列,我们也可以用seq(1,10,1)来生成同样的数列,其中,第一个1表示起始点为1,10表示终点为10,第二个1表示步长(或者叫等差数列的公差)为1。

如果我们对这个向量使用基本运算

> vector + 10
[1] 11 12 13 14 15 16 17 18 19 20

我们会发现这个向量中的每一个元素都进行了相应的操作,这个就是向量化运算,我们不需要利用循环语句来实现这一目的。

当然,如果我们想要对向量中某些特定的值进行处理,R也是可以实现的

> vector[1] + 1
[1] 11
> vector[1] <- vector[1] + 1
> print(vector)
[1] 11 2 3 4 5 6 7 8 9 10

中括号[ ]表示选择这个向量中的第几个元素进行处理,第一行代码表示要让vector的第一个值加1,因此结果会输出11。如果我们想要把这个处理保存下来,则一定要将这个处理后的值赋值回原来的位置。

另外,除了特定的值,当向量的长度很长时,我们不可能一个个去挑选我们所要更改的位置,这时我们就需要使用逻辑运算来筛选满足条件的位置进行处理

> vector[vector < 5] + 1
2 3 4 5

上述代码表示,我们选择这个向量里小于5的数,即1,2,3,4,我们让这四个数分别加1,因此得到了上述运算结果(同样,如果需要保存的话还需要进行赋值处理哟)

除此之外,我们可能还会涉及到两个向量或多个向量的与运算,这个时候就会存在一些需要注意的地方。

v1 <- c(1, 2, 3)
v2 <- c(2, 1, 3)
v3 <- c(1, 2, 3, 4)

如果对上述向量进行四则运算,出现的结果则是向量中的每一个元素都相应地与相同位置的元素进行运算,比如

> v1 + v2
[1] 3 3 6
> v1 + v3
[1] 2 4 6 5
Warning message:
In v1 + v3 : 长的对象长度不是短的对象长度的整倍数

如果两个向量长度相等,那么运算会正常进行。如果两个向量的长度不相等,那么我们也会得到一个结果,即短向量在所有元素都完成处理以后,再从第一个元素开始重复运算,但是R会提供一个警告信息。

> v1 > v2
[1] FALSE TRUE FALSE
> v1 > v3
[1] FALSE FALSE FALSE FALSE
Warning message:
In v1 > v3 : 长的对象长度不是短的对象长度的整倍数

向量的逻辑运算也是一样,会显示出每一个逻辑值。如果两个向量长度不一样,那么会重复短向量的元素进行比较,并提供警告信息。此外,v1 || v2以及v1 && v2可以用来对两个向量的第一个元素进行逻辑运算。

矩阵与数据框的运算

矩阵与数据框的运算和向量的运算类似,只不过有一点需要注意的是,向量是一维的,而矩阵和数据框是二维的,因此在元素选择上,矩阵和数据框的操作与向量存在差异。

> matrix <- matrix(c(1, 2, 3, 4, 5, 6),nrow = 2, ncol = 3,byrow = T)
> print(matrix)[,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

由上述代码可以看出,如果我们想要选择特定的元素,我们需要同时确定这个元素所在的行和列,中括号中有两个元素,[x,y],x代表元素位置的行数,y代表元素位置的列数。如果某个元素为空,则代表选择某行(列)的所有元素。

尽管矩阵的列也可以进行命名,但是数据框的列往往都有自己的名字,在数据分析中称为变量名。

> dataframe <- as.data.frame(matrix)
> print(dataframe)V1 V2 V3
1  1  2  3
2  4  5  6
> dataframe[1]V1
1  1
2  4
> dataframe$V1
[1] 1 4

上述代码中,我们首先将前文的矩阵转换为数据框,这样形成一个具有2个观测值,3个变量的数据框。如果我们使用中括号的形式选择变量,则结果是一个新的数据框。我们也可以利用$符号来选择数据框中的某一变量,这时的结果则是一个向量。两种结果的差异容以后再谈,但是一般我们操作数据框往往使用后者居多。

今天的介绍就到这里啦!

从零开始学R(三)——基本计算相关推荐

  1. r语言中矩阵QR分解_从零开始学R语言Day4|向量、矩阵和数组

    从零开始学R语言Day4|向量.矩阵和数组 1.1向量 1.1.1向量 在Day2中我们提及过用和c()函数来构建向量,具体实例如下. 我们还可以采用vector("类型",长度) ...

  2. 从零开始学R(四)——常用命令:帮助,文件导入与导出与基本操作

    R的常用命令 R的命令非常多,但是有一些命令是非常常用的,在这里我做一个汇总,便于大家使用.(Tips:关于下载和安装R的package以及工作目录的获得与设置命令在第二篇已经聊过,此时就不再赘述了, ...

  3. 从零开始学架构三 高性能

    从零开始学架构三 高性能 读写分离 读写分离的基本实现是: 数据库服务器搭建主从集群,一主一从.一主多从都可以. 数据库主机负责读写操作,从机只负责读操作. 数据库主机通过复制将数据同步到从机,每台数 ...

  4. python从0开始学编程课件_小白从零开始学编程(三)--python基本概念

    前言 从2020年3月份开始,计划写一系列文档--<小白从零开始学编程>,记录自己从0开始学习的一些东西. 第一个系列:python,计划从安装.环境搭建.基本语法.到利用Django和F ...

  5. r语言python0基础_万丈高楼平地起,从零开始学R语(生信分析向,R语言基础)...

    一.R语言的安装 我所做的R语言学习主要是为应对工作上的生信分析,如果你是往这个方向走,那么这篇文章很大可能会帮助你.如果你也是有python基础的话,那我写的可能会更対你口味. 不过现在看到这篇文章 ...

  6. 从零开始学JavaScript三(变量)

    一.变量 ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符. 定义变量时要使用var操作符 如: var message; ...

  7. 从零开始学R(十)——基本统计:线性回归模型(LRM)

    R的基本统计模型与回归分析 这一节,也是这一分享合辑基础篇的最后一节,后续会有一些进阶篇,关于更进一步的模型,例如广义线性模型,分层线性模型,交互效应模型以及相关模型结果的可视化表达.这一节主要关注最 ...

  8. 从零开始学python网络爬虫-从零开始学Python 三(网络爬虫)

    本章由网络爬虫的编写来学习python.首先写几行代码抓取百度首页,提提精神,代码如下: importurllib.request file=urllib.request.urlopen(" ...

  9. 从零开始学安全(三)●黑客常用的windows端口

    端口可选1-65536 1-1024 预保留端口 留给windows系统服务的 下面是常见的端口对应的服务 1 TCP Port Service Multiplexer 传输控制协议端口服务多路开关选 ...

最新文章

  1. C#中Base64之编码,解码方法
  2. SRCNN-图像超分辨的学习
  3. Android SQLiteDatabase的使用
  4. python functools模块(主要是为函数式编程而设计,用于增强函数功能,主要为可调用对象(callable objects)定义高阶函数或操作)
  5. MySQL 数据库热备的操作
  6. 从未知到2019年的文章汇总
  7. Hadoop入门基础教程 Hadoop之单词计数
  8. 14002.petalinux编译配置项目
  9. 学习笔记之C / C++
  10. SCOM监控APC-UPS不间断电源设备
  11. 安卓获取res下的资源文件:string字符串、color颜色、dimen尺寸、array数组、drawable图片和xml、anim/animator动画、raw媒体、assets资源
  12. Spring MVC-学习笔记(4)数据绑定流程
  13. windows 进程之csrss.ext
  14. 那种片里的马赛克,终于可以一键去除了。
  15. Golang中的并发:如何使用Goroutines?详细指南
  16. 上课作业(5)——#576. 饥饿的牛(hunger)
  17. android钢琴软件和弦,‎App Store 上的“判断和弦以钢琴演奏 Piano Chord Judge”
  18. SQLZOO selfjoin/zh——爱丁堡巴士
  19. 不再羡慕小说中的爱情...
  20. 小白学Pytorch 系列--Torch API(1)

热门文章

  1. 如何选择适合自己的研究方法?定性vs定量vs混合方法研究
  2. web前端入门到实战:CSS颜色、背景和剪切
  3. HDU6608 Fansblog
  4. nginx配置禁止访问目录或禁止访问目录下的文件
  5. 解决win10右键桌面出现闪屏问题
  6. ASO如何迅速提升一个核心关键词排名,aso关键词排名怎么优化
  7. 【完全信息静态博弈-Nash均衡的特性】
  8. QT华视身份证读卡器二次开发(获取姓名身份证号)
  9. 生猪出售 matlab,数学建模论文-肥猪最佳销售时机问题.doc
  10. java读取pdf签名_Java 获取PDF中的数字签名信息