用R编写统计程序之三 可重用和面向对象编程.pdfVIP

  • 1
  • 0
  • 约1.12万字
  • 约 9页
  • 2019-07-24 发布于未知
  • 举报

用R编写统计程序之三 可重用和面向对象编程.pdf

使用 R 编写统计程序,第 3 部 分: 可重用和面向对象编程 了解 R 的底层特性 R 是一种作为自由软件发布的富统计环境,其中包括一种编程语言、一个交互式 shell 以及丰富的图形 功能。本文延续 David 的 前两期文章 (与 Brad Huntting 一起编写),研究 R 中的面向对象以及 R 中的其他一些一般编程概念。 本系列的 前两期 研究了 R 在 ¡真实环境¡ 中的使用方法。我们使用这几期的合作者收集的大量温度数 据研究了各种统计分析和制图功能。正如前几篇文章中提到的,我们实际上只接触到了 R 中丰富的统计 库的皮毛。 在本文中,我希望把对进一步统计分析本身 的讨论放在一边 (这在很大程度上是因为我自己还没有掌握 决定最相关技术所需的统计知识;我以前的合作者 Brad Huntting 和许多读者在这些方面比我的知识 丰富)。为了补充前两篇文章中提供的富统计概念,我希望带领读者探索一下 R 的底层语言设施。前两 篇文章主要针对 R 的功能性编程方面;通过这些文章,读者会更熟悉面向对象语言。 另外,以前我们只以相当特定的 方式讨论了 R。在本期中,我将讨论如何为 R 开发创建可重用的和模 块化的组件。 回到基础 在讨论 R 的面向对象概念之前,我们先回顾和澄清一下 R 的数据和函数概念。关于数据要记住的主要 概念是 ¡所有东西都是向量¡。尽管对象从表面上看与向量 (矩阵、数组、data.frames)不同,但是对 象实际上只是向量加上额外的 (可变的)属性,让 R 能够以特殊方式处理它们。 维 (拼写为 dim)是 (某些)R 向量最重要的属性之一。函数 matrix ()、array () 和 dim () 是用于 设置向量的维的简单函数。R 的 OOP 系统类似于把某些东西压缩在对象的 class 属性中。 我们先通过清单 1 中的代码回顾一下维的概念: 清单 1. 创建向量并分配维 v = 1:1000 typeof(v) [1] integer attributes(v) NULL dim(v) = c(10,10,10) # (Re)dimension attributes(v) $dim [1] 10 10 10 v2 = matrix(1:1000, nrow=100, ncol=10) typeof(v2) [1] integer attributes(v2) $dim [1] 100 10 attr(v2,dim) = c(10,10,10) # Redimension attributes(v2) $dim [1] 10 10 10 简单地说,将 dim 属性附着到向量上有好几种语法,但是这些语法在本质上做的事是一样的。 关于 R 的 ¡所有东西都是向量¡ 方式,容易引起混乱的一点是行操作和列操作可能不符合直觉。例如, 以下代码创建一个 2D 数组 (矩阵)并操作单列或单行: 清单 2. 在矩阵向量上按行操作 m = matrix(1:12, nrow=3, ncol=4) m [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 sum(m) # sum of all elements of m [1] 78 sum(m[1,]) # sum of first row [1] 22 但是,如果希望创建一个向量来求每行的总和,您可能会编写下面这样的代码: 清单 3. 执行多个行操作的错误方式 sum(m[c(1,2,3),]) # NOT sum of each row [1] 78 可能会 在这里构造一个循环,但是这与 R 的功能和面向向量的操作不一致。实际上,应该使用函数 apply (): 清单 4. 用 apply() 函数进行行操作 apply(m, 1, sum) # by row [1] 22 26 30 apply(m, 2, sum) # by column [1] 6 15 24 33 apply(m, c(1,2), sum) # by column AND row (sum of each single cell) [,1] [,2] [,3] [,4] [

文档评论(0)

1亿VIP精品文档

相关文档