随笔分类 -  R

上一页 1 2 3 4 5 6 ··· 10 下一页
摘要:在前面的内容中,我们学习了测试代码时间和分析代码性能的工具。为了解决同样的问题,某个函数可能非常快,而另一个函数可能会很慢。理解代码为什么会慢,对编程是很有帮助的。首先,R 是一个动态编程语言。它本身提供了非常灵活的数据结构和代码运行机制。因此,在函数被调用之前,代码解释器很难提前知道如何处理调用。 阅读全文
posted @ 2019-02-11 14:27 NAVYSUMMER 阅读(278) 评论(0) 推荐(0)
摘要:在上一节中,我们学习了如何使用 microbenchmark( ) 对表达式进行基准测试。当一个问题有多种解法时,我们就会想知道哪一个的性能更好;或者在优化一个表达式时,想看它的性能是否比原始代码更好,这时 microbenchmark( ) 就能派上用场了。然而,通常情况下,当感觉到代码很慢时,想 阅读全文
posted @ 2019-02-11 14:27 NAVYSUMMER 阅读(393) 评论(0) 推荐(0)
摘要:Rprof( ) 函数提供了有用的信息帮助我们找到代码瓶颈,进而提升代码性能。RStudio 也发布了一个增强版的分析工具 profvis( ),它还提供了用于分析 R 代码的交互式可视化功能(https://rstudio.github.io/profvis/)。它是一个 R 扩展包,已经集成到 阅读全文
posted @ 2019-02-11 14:26 NAVYSUMMER 阅读(732) 评论(0) 推荐(0)
摘要:R 提供了内置函数 Rprof( ) 对代码的性能进行分析。在分析过程中,会有一个抽样程序,并且是和后续代码一起运行的,直到分析结束。默认情况下,抽样程序基本上每隔20 毫秒就会记录一下当前 R 在运行哪个函数。这样,如果某个函数运行得很慢,那么很可能大部分时间都在调用这个函数。这种抽样方法可能不会 阅读全文
posted @ 2019-02-11 14:24 NAVYSUMMER 阅读(495) 评论(0) 推荐(0)
摘要:输入相同,3 个函数的输出结果也相同。尽管如此,它们的性能差异还是很明显。为了揭示性能差异,我们需要一些工具来测试每段代码的运行时间。最简单的便是system.time( ) 函数。测试任意表达式的运行时间,只需将代码封装在函数内。这里,我们测试 my_cumsum1( ) 函数计算包含 100 个 阅读全文
posted @ 2019-02-11 14:22 NAVYSUMMER 阅读(473) 评论(0) 推荐(0)
摘要:在诞生之初,R 就是为统计计算和数据可视化而设计的,并且被学界和业界广泛运用。就大多数数据分析的目的而言,正确性比性能更重要。换句话说,在 1 分钟内得到正确的结果比在 20 秒内获得错误的结果要好。速度快 3 倍的结果并不比速度慢但正确的结果好 3倍。因此,在确认自己的代码正确之前先不必考虑性能的 阅读全文
posted @ 2019-02-11 14:20 NAVYSUMMER 阅读(209) 评论(0) 推荐(0)
摘要:在前面的章节中,我们已经学习了存储表的关系型数据库,支持嵌套数据结构的非关系型数据库。在 R 中,最常见的嵌套数据结构就是列表对象。之前的章节都关注操作表格数据。本节,我们一起玩转作者开发的 rlist 包,这是一个为操作非表格数据设计的包。rlist 的设计和 dplyr 非常相似。它提供了针对列 阅读全文
posted @ 2019-02-11 14:16 NAVYSUMMER 阅读(582) 评论(0) 推荐(0)
摘要:在前面的章节中,我们已经学习了连接不同类型数据库的方法,包括关系型数据库(SQLite 和 MySQL)和非关系型数据库(MongoDB 和 Redis)。关系型数据库通常以表格形式返回结果,非关系型数据库则可能支持嵌套数据结构和其他特性。通常来说,即使数据已经被载入内存中,我们为数据分析所做的准备 阅读全文
posted @ 2019-02-11 14:16 NAVYSUMMER 阅读(136) 评论(0) 推荐(0)
摘要:关于数据操作的另一个流行的包是dplyr,它发明了一种数据操作语法。dplyr 扩展包并没有使用构建子集函数([ ]),而是定义了一系列基础的变形函数作为数据操作模块,并且引入了一个管道操作符,利用管道操作符将这些变形函数串联起来,进而完成复杂的多步任务。如果还没有安装 dplyr,请运行以下代码以 阅读全文
posted @ 2019-02-11 14:14 NAVYSUMMER 阅读(572) 评论(0) 推荐(0)
摘要:在第一节中,我们回顾了许多用于操作数据框的内置函数。然后,了解了 sqldf 扩展包,它使得简单的数据查询和统计变得更简便。然而,两种方法都有各自的局限性。使用内置函数可能既繁琐又缓慢,而相对于各式各样的 R 函数来说,SQL 又不够强大,所以用 sqldf 进行数据的汇总统计,也不容易。data. 阅读全文
posted @ 2019-02-11 14:11 NAVYSUMMER 阅读(336) 评论(0) 推荐(0)
摘要:data.table 中最常用的语法就是 data[i, j, by],其中 i、j 和 by 都是在动态作用域中被计算的。换句话说,我们不仅可以直接使用列,也可以提前定义诸如 .N 、.I 和 .SD 来指代数据中的重要部分。演示之前,我们先创建一个新的 data.table ,并命名为 mark 阅读全文
posted @ 2019-02-11 14:10 NAVYSUMMER 阅读(178) 评论(0) 推荐(0)
摘要:使用 data.frame 时,改变列名或者排序,都会导致数据结构的复制。在最新版本的 R中,对列重命名已经很少复制了,但要实现完全不进行任何复制就能将某列重新排序,仍然很困难。当数据量较小的时候,还不是问题,如果数据非常大的话,这种操作对性能和内存造成的压力可能就比较麻烦了。作为 data.fra 阅读全文
posted @ 2019-02-11 14:08 NAVYSUMMER 阅读(156) 评论(0) 推荐(0)
摘要:在前面的章节中,我们已经学习了如何使用 reshape2 扩展包对 data.frame 进行塑形。其实,data.table 扩展包为 data.table 对象提供了更快更强的 dcast( ) 函数和 melt( ) 函数。例如,将 toy_tests 的每个产品的质量得分按照年和月进行对齐: 阅读全文
posted @ 2019-02-11 14:06 NAVYSUMMER 阅读(144) 评论(0) 推荐(0)
摘要:data.table 中另一个非常重要的参数是 by,它用于将数据分割成多个部分(即按照 by 的值进行分组),并且对每个部分(组)计算第 2 个参数。在本节中,我们将会演示如何通过 by 以更简便的方式实现数据的分组汇总。例如,by 的最简单用法就是计算每组的记录条数。在下面的代码中,我们将分别统 阅读全文
posted @ 2019-02-11 14:05 NAVYSUMMER 阅读(211) 评论(0) 推荐(0)
摘要:data.table 的另一个独特功能是它的索引支持,也就是说,我们可以在 data.table 中创建键(key),通过键获取记录极其高效。例如,使用 setkey( ) 将 id 设置为 product_info 中的一个键:setkey(product_info, id)注意到,这个函数的行为 阅读全文
posted @ 2019-02-11 14:03 NAVYSUMMER 阅读(101) 评论(0) 推荐(0)
摘要:在前面的章节中,我们学习了如何编写 SQL 语句,在关系型数据库(如 SQLite 和MySQL )中查询数据。我们可能会想,有没有一种方法,能够直接使用 SQL 进行数据框查询,就像数据框是关系型数据库中的表一样呢?sqldf 包给了我们肯定的答案。这个包吸收了 SQLite 的轻量结构和易于嵌入 阅读全文
posted @ 2019-02-11 14:00 NAVYSUMMER 阅读(532) 评论(0) 推荐(0)
摘要:我们已经学习了数据框的基础,这里回顾一下用于筛选数据框的内置函数。尽管数据框本质上是一个由向量构成的列表,由于各列长度相同,所以可以将其看作矩阵进行访问和操作。选择满足特定条件的行,需要为 [ ] 的第 1 个参数提供一个逻辑向量, 第 2 个参数留空。在 R 中,这些操作可以通过内置函数实现。本节 阅读全文
posted @ 2019-02-11 13:58 NAVYSUMMER 阅读(167) 评论(0) 推荐(0)
摘要:我们已经学习了如何筛选、排序、合并和汇总数据框。这些操作只适用于行和列,然而有时候我们需要做一些更复杂的事情。例如,下面这段代码读取了一个数据集,包含了两种产品不同日期的质量和耐久性的测试结果:toy_tests <- read_ _csv("data/product-toy-tests.csv") 阅读全文
posted @ 2019-02-11 13:57 NAVYSUMMER 阅读(210) 评论(0) 推荐(0)
摘要:接下来的例子中,我们会继续使用前面介绍过的产品信息样本和统计数据来演示数据筛选和统计的基本方法。例如,选取所有 type 为 toy 的行:product_info[product_info$type == "toy", ]## id name type class released## 1 T01 阅读全文
posted @ 2019-02-11 13:54 NAVYSUMMER 阅读(162) 评论(0) 推荐(0)
摘要:在前面的章节中,我们已经学习了面向对象编程的基本概念,包括类和方法,以及它们在 R 中是如何通过泛型函数执行方法分派而连接起来的。另外,也掌握了 S3、S4、RC和 R6 的基本用法,包括如何定义类和泛型函数,以及对特定的类实施相应的方法。在掌握了 R 的大部分重要特性之后,我们继续深入并探讨更实用 阅读全文
posted @ 2019-02-11 13:48 NAVYSUMMER 阅读(113) 评论(0) 推荐(0)

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