热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

R语言编程艺术(4)R对数据、文件、字符串以及图形的处理

本文对应《R语言编程艺术》第8章:数学运算与模拟;第10章:输入与输出;第11章:字符串操作;第12章:绘图数学运算与模拟数学函数:数学函数说明exp()以自然

本文对应《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)

  


 


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
author-avatar
bng7541071
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有