R语言编程艺术(4)R对数据、文件、字符串以及图形的处理
本文对应《R语言编程艺术》
第8章:数学运算与模拟;
第10章:输入与输出;
第11章:字符串操作;
第12章:绘图
=========================================================================
数学运算与模拟
数学函数:
数学函数 |
说明 |
exp() |
以自然常数e为底的指数函数 |
log() |
自然对数 |
log10() |
以10为底的常用对数 |
sqrt() |
平方根 |
abs() |
绝对值 |
sin(), cos() |
三角函数 |
min(), max() |
向量的最小、最大值 |
which.min(), which.max() |
向量的最小、最大元素的位置索引 |
pmin(), pmax() |
把多个等长度的向量按元素逐个对比,返回所有向量的第k个元素中最小(最大)的值 |
sum(), prod() |
把一个向量的所有元素求和(求积) |
cumsum(), cumprod() |
把一个向量的前K个元素累计求和(求积) |
round(), floor(), ceiling() |
分别是四舍五入取整、向下取整、向上取整 |
factorial() |
阶乘 |
要求函数的最小、最大值,需要用nlm()和optim()
R也可以进行微积分运算,包括符号微分和数值积分:
- #符号微分
- D(expression(exp(x^2)), “x”)
- #数值积分
- integrate(function(x) x^2, 0, 1)
R的odesolve包可以用于处理微分方程;ryacas包提供了R与Yacas符号数学系统接口。
统计分布函数:
一般为前缀加统计分布函数名组成具体函数
前缀:
d 概率密度函数或概率质量函数
p 累计分布函数
q 分布的分位数
r 随机数生成函数
排序:
对向量进行普通的数值排序,可以使用sort()函数完成;如果想得到原向量的索引,可以使用order()函数。
相关函数还有rank(),它返回向量中每一个元素的排位(rank,第几小,以小数处理并列排名)
向量和矩阵的线性代数运算:
函数 |
线性代数运算 |
crossprod() |
向量内积 |
solve() |
求解线性方程组或者计算矩阵的逆 |
t() |
矩阵的转置 |
qr() |
QR分解 |
chol() |
Cholesky分解 |
det() |
矩阵的行列式 |
eigen() |
矩阵的特征值和特征向量 |
diag() |
从方阵中提出对角矩阵 |
sweep() |
数值分析批量运算符 |
diag()函数:如果输入矩阵则返回向量,输入向量则返回矩阵,输入标量则返回相应大小的单位对角矩阵。
集合运算:
集合运算函数 |
说明 |
union(x, y) |
集合x和y的并集 |
intersect(x, y) |
集合x和y的交集 |
setdiff(x, y) |
集合x和y的差集 |
setequal(x, y) |
检验集合x和y是否相等 |
c%in%y |
成员,检验c是否为集合y中的元素 |
choose(n, k) |
从含有n个元素的集合中选取含有k个元素的子集的数目 |
用R做模拟:
为了重复运行时获得相同的随机数流,使用set.seed()函数。
=========================================================================
输入与输出
连接键盘与显示器:
scan()函数、readline()函数、print()函数、cat()函数
scan()函数:从文件中读取或者用键盘输入一个向量,可以是数值型或字符型向量。注意读取时默认变量为double型,如果字符型需要手动设置what = “”(或者任意字符串),否则会报错;默认分割符为“空白字符”(whitespace),同样可以手动设置其他类型;当scan()函数接收的文件名为空时,会从键盘读取数据,命令行在每行行首提示的数字是下一个输入项的索引,键入一个空行表示结束输入,默认报告已读取的项目数,如果不希望得到报告,可以设置quiet = TRUE。
readline()函数:可以从键盘输入单行数据,可以指定一个提示语字符串作为参数。
print()函数:打印对象内容;
cat()函数:也是打印对象内容,但是与print()不同之处在于,不会输出编号,只输出内容;可以灵活自定义输出分隔符。
读写文件:
从文件中读取数据框或矩阵、文本文件的操作、访问远程机器上的文件、读取文件和目录信息。
从文件中读取数据框或矩阵:read.table()函数;
读取文本文件:readLines()函数。
连接的介绍:一般通过调用file()/url()或其他R函数创建,更多函数可在命令行输入?connection查看。用close()函数关闭连接,可以让系统知道你已经完成读取操作,可以正式写入磁盘,在互联网上操作可以告诉服务器客户已下线。
通过URL在远程计算机上访问文件:某些I/O函数,如read.table()和scan(),可以用网站地址(URL)作为参数(替代文件名)在网络上访问文件。
写文件:write.table()函数;cat()函数;writeLines()函数
- > #cat()函数可以创建文件u,一次写入一部分,每次写文件都会自动保存
- > cat(“abc\n”, file = “u”)
- > cat(“de\n”, file = “u”, append = TRUE)
- > #file()函数创建文件www并通过设置w建立写入连接
- > #writeLines()会将字符串向量分行写入,需要主动关闭连接才能保存文件
- > c <- file(“www”, “w”)
- > writeLines(c(“abc”, “de”, “f”), c)
- > close(c)
获取文件和目录信息:
函数 |
说明 |
file.info() |
参数是表示文件名的字符串向量,函数会给出每个文件的大小、创建时间、是否为目录等信息 |
dir() |
返回一个字符串向量,列出其第一个参数指定的目录中的所有文件的名称。如果指定recursive = TRUE,结果将把第一个参数下面整个目录树都显示出来 |
file.exists() |
返回一个布尔向量,表示作为第一个参数的字符串向量中给定的每个文件名是否存在 |
getwd()/setwd() |
用于确定或改变当前的工作目录 |
命令行输入?files可以查看所有与文件和目录相关的函数
访问互联网:
R的套接字(socket)工具可以让程序员访问互联网(Internet)的TCP/IP协议。
R中的socket:
A在与B的连接期间发送的所有字节被看作是一个整体,称为“长消息”(big message)。将长消息分割回若干行文本需要一些额外的工作,对此问题,以下方法可以达到解决目的:
readLines()和writeLines():这两个函数允许你在写程序时把TCP/IP的消息传输当作是一行一行传递的,尽管这并不是真实情况。如果你要传输的数据本质上就是按行分隔的,那么这两个函数将是非常方便的。
serialize()和unserialize():可以利用这两个函数传输R对象,比如矩阵或者某个统计函数的复杂输出结果。传输对象将在发送端转换成字符串形式,然后在接收端转换回原来的对象形式。
readBin()和writeBin():这两个函数用于传输二进制的数据。
以上每个函数都可以对R中的连接进行操作。
此外R中还有另外两个socket函数:
socketConnection():该函数可以通过socket来创建一个R连接。可以使用参数port来设定端口号,然后将server参数设为TRUE或FALSE来说明需要创建的是服务器还是客户端。如果创建的是客户端,还必须用host参数来设定服务器的IP地址。
socketSelect():该函数在服务器与多个客户端相连接时非常有用。其主要的参数socklist是一系列连接的列表,而返回值是这些连接的一个子列表,其中的元素所表示的连接提供了服务器可以读取的数据。
=========================================================================
字符串操作
常用字符串操作函数:
函数名及调用形式 |
功能 |
grep(pattern, x) |
在字符串向量x里搜索字符串pattern,返回一个长度不超过x的向量,包含了符合条件的索引,如果没有符合条件的pattern,则会返回一个空向量 |
nchar(x) |
返回字符串x的长度 |
paste(…) |
用于把若干个字符串拼接起来 |
sprintf(…) |
按一定格式把若干个组件组合成字符串 |
substr(x, start, stop) |
返回给定字符串x中指定位置范围start:stop上的子字符串 |
strsplit(x, split) |
函数根据x中的字符串split把字符串x拆分成若干子字符串,返回这些字符串组成的R列表 |
regexpr(pattern, text) |
在字符串text中寻找pattern,返回pattern匹配的第一个子字符串的起始字符位置 |
gregexpr(pattern, text) |
在字符串text中寻找pattern,返回pattern匹配的所有子字符串的起始字符位置 |
正则表达式:
正则表达式是一种通配符,用来描述一系列字符串的简略表达式。
例如[au]表示含有字母a或u的字符串,英文句点(.)表示任意一个字符,反斜杠(\)可以使字符脱离元字符属性(元字符:不按照字面意思理解的字符)。具体学习需要参照正则表达式的教程。
注意当通过一些符号作为字符串查找或分割时,出现一些不可预料的错误时,可以考虑是否是正则表达式引入的。
绘图
创建图形:
函数 |
功能 |
plot() |
泛型函数,真正被调用的函数依赖于对象所属的类 |
abline() |
添加线条(根据斜率与纵截距) |
lines() |
添加线条(根据两个截距) |
points() |
添加点 |
legend() |
添加图例 |
text() |
添加文字 |
locator() |
精确定位 |
在保持现有图形的基础上新增一个绘图窗口:
- hist(x)
- #Linux系统下
- x11()
- #Mac系统
- macintosh()
- #Windows系统
- windows()
- hist(y)
- #图形将在一个新窗口打开显示
定制图形:
选项 |
功能 |
cex |
改变字符大小(倍数) |
xlim, ylim |
坐标轴范围 |
函数 |
功能 |
polygon() |
添加多边形 |
lowess()/loess() |
平滑散点 |
绘制具有显式表达式的函数图像:
根据表达式定义函数,描点即可。
实现方式:plot()描出所有点,或者直接使用curve(),参数设置为表达式与起止点即可。
将图形保存到文件:
R图形设备:
可以打开一个文件(如PDF):pdf(“d12.pdf”)
函数 |
功能 |
dev.list() |
查看所有图形设备 |
dev.cur() |
查看当前活动图形设备 |
dev.set() |
设置活动图形设备,参数为dev.list()查询到的设备编号 |
dev.copy() |
将图形拷贝到指定图形设备上,参数为dev.list()查询到的设备编号 |
dev.off() |
关闭图形设备 |
创建三维图形:
R中提供了一系列函数用来绘制三维图形,例如persp()和wireframe()函数可以绘制曲面,cloud()函数可以绘制三维散点图。
- #wireframe()函数使用范例
- library(lattice)
- a <- 1:10
- b <- 1:15
- eg <- expand.grid(x = a, y = b)
- eg$z <- eg$x^2 + eg$x *eg$y
- wireframe(z ~ x + y, eg)
R语言编程艺术(4)R对数据、文件、字符串以及图形的处理的更多相关文章
- R语言编程艺术(5)R语言编程进阶
本文对应<R语言编程艺术> 第14章:性能提升:速度和内存: 第15章:R与其他语言的接口: 第16章:R语言并行计算 ================================== ...
- R语言编程艺术(3)R语言编程基础
本文对应<R语言编程艺术> 第7章:R语言编程结构: 第9章:面向对象的编程: 第13章:调试 ============================================== ...
- R语言编程艺术(2)R中的数据结构
本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ======================================== ...
- R语言编程艺术(1)快速入门
这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是“程序”,因此,希望通过学习这本书,能提高编程 ...
- <R语言编程艺术>的一个错误以及矩阵相加
R语言编程艺术讲矩阵这节时,举了个随机噪声模糊罗斯福总统画像的例子.但是里面似乎有个错误,例子本意是区域外的值保持不变,而选定区域的值加一个随机值,但是实际情况是两个行列不相等的矩阵相加,会报错,如果 ...
- R语言编程艺术# 矩阵(matrix)和数组(array)
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...
- R语言编程艺术#02#矩阵(matrix)和数组(array)
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...
- R语言编程艺术#03#列表(list)
向量的元素要求都是同类型的,而列表(list)与向量不同,可以组合多个不同类型的对象.类似于C语言中的结构体(struct)类型. 1.创建列表 从技术上讲,列表就是向理.之前我们接触过的普通向量都称 ...
- R语言编程艺术# 数据类型向量(vector)
R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...
随机推荐
- IE盒模型和W3C盒子模型的区别
其实这个问题到现在真的是没有意义了,因为早在IE6的兼容模式开始就已经弃用了IE盒子模型了,但是现在的各种面试题还是会时常出现这样的上世纪的题目,我觉得其实时纯粹的刁难. 好了,吐槽不多说了,直接上图 ...
- Java基础-零拷贝技术应用案例
Java基础-零拷贝技术应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 零拷贝技术在Hadoop生态圈中很多组件得到应用,典型的比如kafka组件,它就很成功的应用了零拷贝 ...
- python常用模块-调用系统命令模块(subprocess)
python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...
- Oracle 重要知识点
这些是最简单的,理解这些再去看其他的高深一点的吧....... 游标 oracle里面的游标分为四种情况,分别是LOOP循环,FOR循环,删除,更新 1.LOOP循环 检索EMP表.使用LOOP循环语 ...
- webpack快速入门——CSS进阶:自动处理CSS3前缀
为了浏览器的兼容性,有时候我们必须加入-webkit,-ms,-o,-moz这些前缀.目的就是让我们写的页面在每个浏览器中都可以顺利运行. 1.安装 cnpm i postcss-loader aut ...
- Struts2_day01
一.内容大纲 1 struts2概述 (1)应用在web层 2 struts2入门案例 3 struts2底层执行过程 4 struts2相关配置 (1)struts.xml配置 - package. ...
- 爬虫笔记之刷小怪练级:yymp3爬虫(音乐类爬虫)
一.目标 爬取http://www.yymp3.com网站歌曲相关信息,包括歌曲名字.作者相关信息.歌曲的音频数据.歌曲的歌词数据. 二.分析 2.1 歌曲信息.歌曲音频数据下载地址的获取 随便打开一 ...
- linux命令中which、whereis、locate有什么区别?
1.find find是最常用和最强大的查找命令.它能做到实时查找,精确查找,但速度慢. find的使用格式如下: #find [指定目录] [指定条件] [指定动作] 指定目录:是指所要搜索的目录和 ...
- 【源码阅读】Mimikatz相关资料
Mimikatz GitHub (源码) https://github.com/gentilkiwi/mimikatz Mimikatz GitHub Wiki (包含了一些说明文档) https:/ ...
- Coins in a Line I & II
Coins in a Line I There are n coins in a line. Two players take turns to take one or two coins from ...