随笔分类 -  R

上一页 1 2 3 4 5 6 7 ··· 10 下一页
摘要:在本章的前几节中,我们已经掌握了关系型数据库的基础,学会使用 SQL 查询数据。关系型数据库主要是以表的形式组织,即它是相互之间具有关联的表的集合。然而,当数据量超出服务器的承载容量时,新问题就产生了,因为关系型数据库的传统模型不容易支持水平可伸缩性,即不再用单个服务器,而是用服务器群集中存储数据。 阅读全文
posted @ 2019-02-11 13:47 NAVYSUMMER 阅读(208) 评论(0) 推荐(0)
摘要:Redis(https://redis.io/),既不像 SQLite 以表的形式存储数据,也不像 MongoDB 允许以嵌套结构存储和查询,它是一种内存数据库结构,即将数据缓存在内存中。它将键—值(key-value)缓存于内存中,以此获得极高的键值检索性能。然而,它并不支持 SQL 数据库或 M 阅读全文
posted @ 2019-02-11 13:46 NAVYSUMMER 阅读(125) 评论(0) 推荐(0)
摘要:MongoDB 是一种流行的非关系型数据库,它提供了一种面向文档的数据存储方式。每种商品就是集合中的一份文档。商品具有一些描述字段和一个数组类型的评论字段。所有评论都是一个子文档,因此每个逻辑项都可以以自己的逻辑形式进行存储。以下是集合中一种商品的 JSON(https://en.wikipedia 阅读全文
posted @ 2019-02-11 13:42 NAVYSUMMER 阅读(125) 评论(0) 推荐(0)
摘要:在处理大数据文件时,常常在读写数据方面遇到许多问题。实际可能出现两种极端情况。一种是文本格式的数据源非常大,几乎不能载入内存。另一种是:数据分散在许多文件中,需要费些力气将它们整合到一个数据框中。对于第 1 种情况,我们可以逐块地读取数据,并将每块数据分别追加到数据库的 某张表中。以下函数便是为此设 阅读全文
posted @ 2019-02-11 11:23 NAVYSUMMER 阅读(431) 评论(0) 推荐(0)
摘要:在前面的章节中,我们使用一系列内置函数,例如 read.csv( ) 和 read.table( )从分隔符分隔的文件(例如 csv 格式)中读取数据。然而,当数据文件很大时,这些存储方式未必是最好的。为什么文本格式不再适用呢?主要有如下 3 个理由。1.read.csv( ) 这类函数主要用于将整 阅读全文
posted @ 2019-02-11 11:23 NAVYSUMMER 阅读(111) 评论(0) 推荐(0)
摘要:流行的关系数据库具有很强的确保一致性的能力。当我们插入或更新数据时,是通过事务实现的。其中事务是对数据库操作的逻辑单位,事务操作有两种:提交(将数据库所做的修改永久写入数据库)和回滚(将数据库所做的修改全部撤销,数据库还原到操作前的状态)。如果一个事务操作失败了,我们可以撤销并回滚,以保证数据的一致 阅读全文
posted @ 2019-02-11 11:21 NAVYSUMMER 阅读(179) 评论(0) 推荐(0)
摘要:在本节开始的部分,我们提到使用关系型数据库的优势之一,是可以存储大量数据。通常,我们只提取出数据库的一个子集进行研究。然而,有时,我们需要检查的数据量还是超过了计算机内存容量。显然不能把所有数据载入内存,所以必须逐块处理。绝大部分关系型数据库支持逐块提取查询。接下来的例子,我们用 dbSendQue 阅读全文
posted @ 2019-02-11 11:19 NAVYSUMMER 阅读(130) 评论(0) 推荐(0)
摘要:前面几节中,我们已经掌握了如何向 SQLite 数据库中写入数据。这一节,我们将学习如何根据需求对数据库进行查询,进而从中获取数据。接下来的例子中会使用 data/datasets.sqlite(之前创建的)。首先,需要与数据库建立连接:con <- dbConnect(SQLite( ), "da 阅读全文
posted @ 2019-02-11 11:18 NAVYSUMMER 阅读(673) 评论(0) 推荐(0)
摘要:一旦有了 SQLite 数据库,我们不仅可以访问存储于表中的数据,还可以访问一些元数据,倒如,所有表的名字或某个表的列。连接到之前创建的 SQLite 数据库,以便演示:con <- dbConnect(SQLite( ), "data/datasets.sqlite")调用 dbExistsTab 阅读全文
posted @ 2019-02-11 11:16 NAVYSUMMER 阅读(160) 评论(0) 推荐(0)
摘要:首先,我们学习如何创建一个SQLite 数据库。如果想要在data/example.sqlite 这个路径中创建一个示例数据库,就必须确保该路径存在。如果该路径不存在,就必须先创建路径:if (!dir.exists("data")) dir.create("data")现在,路径 data/ 是可 阅读全文
posted @ 2019-02-11 11:14 NAVYSUMMER 阅读(596) 评论(0) 推荐(0)
摘要:在前面的章节中,我们掌握了使用函数式编程和元编程技术来定制函数的行为。也可以用函数创建函数,就是所谓的闭包。还可以像传递其他对象一样,将函数传递给函数,即使用高阶函数。在本章中,我们将走进面向对象编程的世界,学习如何定制对象的行为。R 提供了几种不同的面向对象系统。乍一看,它们似乎与其他编程语言中的 阅读全文
posted @ 2019-02-11 11:12 NAVYSUMMER 阅读(110) 评论(0) 推荐(0)
摘要:RC 的加强版是 R6 , R6 是一个扩展包,能够实现支持公共和私有字段与方法的更有效的引用类,还有一些其他强大的功能。运行以下代码安装这个包:install.packages("R6")R6 类允许我们定义类,其行为特征更类似于流行的面向对象编程语言。我们用下面的代码定义了 Vehicle 类, 阅读全文
posted @ 2019-02-11 11:11 NAVYSUMMER 阅读(535) 评论(0) 推荐(0)
摘要:R 中还有一种具有引用语义的类系统,它更像其他面向对象编程语言中的类系统。首先,为了定义一个引用类( reference class , RC ),我们要给 setRefClass( )一个类定义。不像 S4 类系统使用 new( )创建一个对象实例,setRefClass( )会返回一个对象实例生 阅读全文
posted @ 2019-02-11 11:09 NAVYSUMMER 阅读(316) 评论(0) 推荐(0)
摘要:上一节中,我们介绍了 S3 系统。与大多数其他编程语言的面向对象系统不同,与那些类被定义为固定结构,且随着程序编译有确定的方法分派的系统相比,S3 系统显得非常不严谨。当我们定义一个 S3 类时,几乎没有可以确定的。我们不仅可以随时添加或移除类的方法,而且可以按需在对象中插入或删除元素。此外,S3 阅读全文
posted @ 2019-02-11 11:07 NAVYSUMMER 阅读(191) 评论(0) 推荐(0)
摘要:S4 泛型函数更加灵活,因为它也支持多重分派,也就是说,S4 泛型函数可以根据多个 参数执行方法分派。这里,我们定义另外一个 S4 类族:具有数值height 类表示的 Object 类。Cylinder和 Cone 都继承 Object。然后,我们使用多重分派计算底面具有特定形状的特定几何物体的体 阅读全文
posted @ 2019-02-11 11:05 NAVYSUMMER 阅读(163) 评论(0) 推荐(0)
摘要:在前面的例子中,我们可以看出 S4 比 S3 更正式,因为 S4 类有类的正式定义。同样, S4 的泛型函数也更加正式。在一个关于形状的例子中,我们定义了一系列具有继承关系的 S4 类,只是继承关系的层级结构比较简单。首先,Shape 是处于根节点的类,Polygon 和 Circle 都继承自 S 阅读全文
posted @ 2019-02-11 11:02 NAVYSUMMER 阅读(278) 评论(0) 推荐(0)
摘要:S3 系统是宽泛且灵活的,同类的 S3 对象也可能有不同的成员。但是,对于 S4 系统,就不会发生,也就是说,当我们创建一个属于某类的 S4 对象实例时,不能任意添加不在类表示中的字段。举个例子,在创建一个新的 Product 类的对象实例时,我们不能添加 volume 字段:bottle <- n 阅读全文
posted @ 2019-02-11 11:00 NAVYSUMMER 阅读(138) 评论(0) 推荐(0)
摘要:S3 类仅用一个字符向量表示,与之不同的是,S4 类要求对类和方法有正式定义。为了定义一个 S4 类,我们需要调用 setClass( ),并提供一种类成员的表示,这种表示被称为字段(slots)。通过名称和每个字段的类来指定这种表示。本节中,我们使用 S4 类重新定义 product 对象:set 阅读全文
posted @ 2019-02-11 10:59 NAVYSUMMER 阅读(352) 评论(0) 推荐(0)
摘要:在 R 中,S3 对象系统是一个简单且宽松的面向对象系统。每个基本对象的类型都有一个 S3 类名称。例如:integer、numeric、character、logical、list 和 data.frame 等都属于 S3 类。举个例子,vec1 的类型是 double,意味着 vec1 的内部类 阅读全文
posted @ 2019-02-11 10:56 NAVYSUMMER 阅读(269) 评论(0) 推荐(0)
摘要:现在,我们可以尝试定义新类了。注意到 class(x) 获取 x 的类,而 class(x)<-"some_class"将 x 的类设为 some_class。1.使用列表作为底层数据结构就像 lm 和 rpart,列表可能是创建新类时使用最广泛的底层数据结构。这是因为类描述了对象的类型和对象之间交 阅读全文
posted @ 2019-02-11 10:55 NAVYSUMMER 阅读(424) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 ··· 10 下一页
交流群 编程书籍