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 ...
随机推荐
- 【贪心策略】渡河(river)
“假舟楫者,非能水也,而绝江河.”这句话说的是,借助渡船的人,不是会游水,却能横渡江河. 会游水的人反而不一定能顺利地横渡江河.由于江面风浪很大,他们必须潜泳渡河.这就必须用到氧气瓶.氧气瓶当然是出题 ...
- 24. Swap Nodes in Pairs(M);25. Reverse Nodes in k-Group(H)
24. Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For ...
- 【CSS】clear清除浮动
clear清除浮动1.作用: 规定元素的某一侧不允许存在浮动元素 2.值: 3.应用: 清除其他浮动元素对其产生的影响 <!DOCTYPE html> <html lang=&quo ...
- Hadoop Yarn源码 - day1
Hadoop 2.6.0下面的关于Yarn工程,如下所示,主要有以下七个module: hadoop-yarn-api:和外部平台交互的接口 hadoop-yarn-applications hado ...
- 阿里云Linux服务器挂载数据盘
步骤1.登录服务器2.检查磁盘信息 命令:fdisk -l3.磁盘分区 命令:fdisk /dev/xvdb 查看命令帮助 m n //新增一个分区 p //建立一个主分区 1 //设置盘符为1 回车 ...
- CSS-3 Transform 的使用
CSS3制作动画的几个属性:变形(transform).转换(transition)和动画(animation)等更高级的CSS3技术.这篇主要是 Transform 的使用. Transform 字 ...
- json转化数组
//json格式数据 $data = '[{ "F_ModuleId": "1", "F_ParentId": "0", ...
- MySQL-数据操作-增删改查
1.增加: insert into 表 (列名,列名...) values (值,值,值...) insert into 表 (列名,列名...) values (值,值,值...),(值,值,值.. ...
- C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)【转】
转自:https://www.cnblogs.com/ransn/p/5081198.html 转载地址 : http://blog.csdn.net/21aspnet/article/details ...
- CodeSmith的基础模版类(CodeSmith help中的内容)
基础模版类类型描述: Batch OutputFileCodeTemplate 模版通过继承此类能够在生成过程中把他们的输出保存到文件中 ScriptError 在脚本执行中出现一个 ...