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 ...
随机推荐
- 51nod1229 序列求和 V2 【数学】
题目链接 B51nod1229 题解 我们要求 \[\sum\limits_{i = 1}^{n}i^{k}r^{i}\] 如果\(r = 1\),就是自然数幂求和,上伯努利数即可\(O(k^2)\) ...
- 3: $.ajax()方法详解
1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如 ...
- linux命令总结之echo命令
echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串. echo命令的语法是: echo [选 ...
- Linux下使用cron让Python程序持久化运行
正常情况下,一个python程序如果希望实现一直运行,不出错不奔溃是很难的,即使编译为可持续文件也是一样 幸运的是很多需求并不是需要24小时不间断运行,而是每隔一段时间运行一次即可 Linux系统自带 ...
- (一)Git时间--初识版本控制工具
//配置一下你的身份 git config --global use.name "Douzi" git config --global use.email "jdouzi ...
- 那些年的 网络通信之 UDP 数据报包传输---
下面是 一个多线程,基于 UDP 用户数据报包 协议 的 控制台聊天小程序 import java.io.*; import java.net.*; class Send implements Run ...
- Angular 下的 directive (part 1)
directive 指令 Directive components 指令部分 使用指令自动引导一个AngularJS应用.ngApp指令指定应用程序的根元素,通常是放在页面的根元素如: < ...
- 【NOI】2017 蚯蚓排队(BZOJ 4943,LOJ 2303) 模拟+hash
[题目]#2303. 「NOI2017」蚯蚓排队 [题意]给定n条长度不超过6的蚯蚓,初始各自在一个队伍.m次操作:1.将i号蚯蚓和j号蚯蚓的队伍合并(保证i为队尾,j为队首).2.将i号蚯蚓和它后面 ...
- State Estimation for Robotics (Tim Barfoot) exercises Answers
Here are some exercises answers for State Estimation for Robotics, which I did in June, 2017. The bo ...
- mongo批量操作存在更新否则插入
def save_data(ok_ps): ns = [] for ok in ok_ps: ok['last_use_time'] = 0 ok['protocol'] = 0 # 协议类型 0:h ...