第五章 高级数据管理

在这里插入图片描述
在第4章,我们审视了R中基本的数据集处理方法,本章我们将关注一些高级话题。本章分为三个基本部分。在第一部分中,我们将快速浏览R中的多种数学、统计和字符处理函数。为了让这一部分的内容相互关联,我们先引入一个能够使用这些函数解决的数据处理问题。在讲解过这些函数以后,再为这个数据处理问题提供一个可能的解决方案。
接下来,我们将讲解如何自己编写函数来完成数据处理和分析任务。首先,我们将探索控制程序流程的多种方式,包括循环和条件执行语句。然后,我们将研究用户自编函数的结构,以及在编写完成后如何调用它们。
最后,我们将了解数据的整合和概述方法,以及数据集的重塑和重构方法。在整合数据时,你可以使用任何内建或自编函数来获取数据的概述,所以你在本章前两部分中学习的内容将会派上用场。

5.1 一个数据处理难题

要讨论数值和字符处理函数,让我们首先考虑一个数据处理问题。一组学生参加了数学、科学和英语考试。为了给所有学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来。另外,你还想将前20%的学生评定为A,接下来20%的学生评定为B,依次类推。最后,你希望按字母顺序对学生排序。数据如表5-1所示。

在这里插入图片描述
观察此数据集,马上可以发现一些明显的障碍。首先,三科考试的成绩是无法比较的。由于它们的均值和标准差相去甚远,所以对它们求平均值是没有意义的。你在组合这些考试成绩之前,必须将其变换为可比较的单元。其次,为了评定等级,你需要一种方法来确定某个学生在前述得分上百分比排名。再次,表示姓名的字段只有一个,这让排序任务复杂化了。为了正确地将其排序,需要将姓和名拆开。
以上每一个任务都可以巧妙地利用R中的数值和字符处理函数完成。在讲解完下一节中的各种函数之后,我们将考虑一套可行的解决方案,以解决这项数据处理难题。

5.2 数值和字符处理函数

本节我们将综述R中作为数据处理基石的函数,它们可分为数值(数学、统计、概率)函数和字符处理函数。在阐述过每一类函数以后,我将为你展示如何将函数应用到矩阵和数据框的列(变量)和行(观测)上(参见5.2.6节)。

5.2.1 数学函数

表5-2列出了常用的数学函数和简短的用例。
在这里插入图片描述
在这里插入图片描述
对数据做变换是这些函数的一个主要用途。例如,你经常会在进一步分析之前将收入这种存在明显偏倚的变量取对数。数学函数也被用作公式中的一部分,用于绘图函数(例如x对sin(x))和在输出结果之前对数值做格式化。
表5-2中的示例将数学函数应用到了标量(单独的数值)上。当这些函数被应用于数值向量、矩阵或数据框时,它们会作用于每一个独立的值。例如,sqrt(c(4, 16, 25))的返回值为c(2, 4, 5)。

5.2.2 统计函数

常用的统计函数如表5-3所示,其中许多函数都拥有可以影响输出结果的可选参数。举例
来说:

y <- mean(x)

提供了对象x中元素的算术平均数,而:

z <- mean(x, trim = 0.05, na.rm=TRUE)

则提供了截尾平均数,即丢弃了最大5%和最小5%的数据和所有缺失值后的算术平均数。请使用help()了解以上每个函数和其参数的用法。
在这里插入图片描述
要了解这些函数的实战应用,请参考代码清单5-1。这个例子演示了计算某个数值向量的均值和标准差的两种方式。
代码清单5-1 均值和标准差的计算
方法1:

x <- c(1,2,3,4,5,6,7,8)
mean(x)
sd(x)

方法2:

n <- length(x) 
meanx <- sum(x)/n 
css <- sum((x - meanx)^2)
sdx <- sqrt(css / (n-1))
meanx

第二种方式中修正平方和(css)的计算过程是很有启发性的:
(1) x等于c(1, 2, 3, 4, 5, 6, 7, 8),x的平均值等于4.5(length(x)返回了x中元素
的数量);
(2) (x – meanx)从x的每个元素中减去了4.5,结果为c(-3.5, -2.5, -1.5, -0.5, 0.5,
1.5, 2.5, 3.5);
(3) (x – meanx)^2将(x - meanx)的每个元素求平方,结果为c(12.25, 6.25, 2.25,
0.25, 0.25, 2.25, 6.25, 12.25);
(4) sum((x - meanx)^2)对(x - meanx)^2)的所有元素求和,结果为42。 R中公式的写法和类似MATLAB的矩阵运算语言有着许多共同之处。(我们将在附录D中具体关注解决矩阵代数问题的方法。)
在这里插入图片描述

5.2.3 概率函数

你可能在疑惑为何概率函数未和统计函数列在一起。(你真的对此有些困惑,对吧?)虽然根据定义,概率函数也属于统计类,但是它们非常独特,应独立设一节进行讲解。概率函数通常用来生成特征已知的模拟数据,以及在用户编写的统计函数中计算概率值。
在R中,概率函数形如 :

[dpqr]distribution_abbreviation()

其中第一个字母表示其所指分布的某一方面:
d = 密度函数(density)
p = 分布函数(distribution function)
q = 分位数函数(quantile function)
r = 生成随机数(随机偏差)
常用的概率函数列于表5-4中。
在这里插入图片描述
我们不妨先看看正态分布的有关函数,以了解这些函数的使用方法。如果不指定一个均值和一个标准差,则函数将假定其为标准正态分布(均值为0,标准差为1)。密度函数(dnorm)、分布函数(pnorm)、分位数函数(qnorm)和随机数生成函数(rnorm)的使用示例见表5-5。
在这里插入图片描述
代码清单5-2 生成服从正态分布的伪随机数
在这里插入图片描述
通过手动设定种子,就可以重现你的结果了。这种能力有助于我们创建会在未来取用的,以及可与他人分享的示例。
在这里插入图片描述

mvrnorm(n, mean, sigma)

其中n是你想要的样本大小,mean为均值向量,而sigma是方差协方差矩阵(或相关矩阵)。代码清单5-3从一个参数如下所示的三元正态分布中抽取500个观测。
在这里插入图片描述
代码清单5-3 生成服从多元正态分布的数据

rm(list = ls()) 
library(MASS)
options
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书深入介绍和讨论了Solaris系统管理各个方面的概念、方法和注意事项。其主要内容有:邮件服务;NIS+;自动加载程序服务;服务访问工具;应用软件;Shell编程介绍;系统安全。本书可供计算机系统管理、维护人员和计算机应用人员使用。 目 录 译者序 前言 第一部分 邮件服务 第1章 了解邮件服务 1 1.1 邮件服务术语 1 1.1.1 在邮件配置中的系统 1 1.1.2 用户代理 4 1.1.3 邮件传输代理 4 1.1.4 邮件处理程序 4 1.1.5 域 5 1.1.6 邮件地址 7 1.1.7 信箱 7 1.1.8 别名 8 1.2 邮件服务器组件 10 1.3 邮件服务综述 14 1.3.1 邮件服务剖析 14 1.3.2 邮件服务如何工作 15 1.3.3 sendmail 如何工作 16 1.3.4 邮件寻址如何工作 17 第2章 规划邮件服务 19 2.1 只有本地邮件 19 2.2 本地邮件和一个uucp连接 19 2.3 一个域、两个网络和一个路由器 20 2.4 两个域和一个网关 21 第3章 设置和管理邮件服务 22 3.1 设置邮件服务准备 22 3.2 设置邮件服务 22 3.2.1 设置邮件服务器 23 3.2.2 设置邮件客户 23 3.2.3 设置邮件主机 24 3.2.4 设置中继主机 24 3.2.5 设置网关 25 3.2.6 创建邮件别名 25 3.2.7 设置NIS别名文件 25 3.2.8 设置本地邮件别名文件 26 3.2.9 设置DNS别名文件 27 3.2.10 设置邮局管理员别名 27 3.3 测试邮件配置 28 3.4 管理邮件配置 28 3.4.1 邮局管理员职责 28 3.4.2 邮件队列 29 3.4.3 系统日志 30 3.5 邮件配置问题解答 32 3.5.1 检查别名 32 3.5.2 测试sendmail 33 3.5.3 验证到其他系统的连接 33 3.5.4 其他诊断信息 33 第4章 自定义sendmail配置文件 34 4.1 sendmail功能概述 34 4.1.1 与外部世界的接口 34 4.1.2 sendmail 程序工作 35 4.1.3 消息标题编辑 36 4.1.4 配置文件 36 4.2 sendmail实现 36 4.2.1 向文件和程序发送邮件 36 4.2.2 消息调度 36 4.2.3 消息发送 37 4.2.4 消息排队 37 4.2.5 配置概述 37 4.3 sendmail参数介绍 38 4.3.1 队列间隔 38 4.3.2 后台模式 38 4.3.3 可选的配置文件 38 4.4 调整配置参数 38 4.4.1 时间值 38 4.4.2 发送模式 39 4.4.3 负载限制 39 4.4.4 日志级别 40 4.4.5 文件模式 40 4.5 配置文件 41 4.5.1 sendmail配置文件部分 41 4.5.2 sendmail配置文件例子 42 4.5.3 配置文件文法 49 4.5.4 特别的标题行 51 4.5.5 地址重写规则 52 4.5.6 构造新的配置文件 58 4.6 命令行参数 59 4.7 配置选项 60 4.8 邮件处理程序标志 61 第二部分 NIS+ 第5章 NIS+环境介绍 63 5.1 NIS和NIS+比较 63 5.2 NIS+名字空间 64 5.3 NIS+安全 69 5.3.1 NIS+身份验证 69 5.3.2 访问权限 71 5.4 NIS+更新模块 72 5.5 NIS和NIS+兼容性 72 5.6 有名服务开关 73 5.7 NIS+管理 74 5.7.1 AdminSuite 74 5.7.2 NIS+命令 75 第6章 设置NIS+客户 79 6.1 安全考虑 79 6.2 预请求 80 6.3 NIS+客户凭证设置步骤 80 6.4 NIS+客户设置步骤 80 6.5 设置验证 82 6.5.1 验证Cache管理器在运行 83 6.5.2 检查/var/nis目录内容 83 6.5.3 验证NIS+命令成功 83 第三部分 自动加载程序服务 第7章 了解自动加载程序 85 7.1 NFS术语 85 7.1.1 服务器和客户系统 85 7.1.2 加载点 86 7.1.3 虚拟文件系统表 86 7.1.4 加载和卸载 86 7.1.5 加载表(/etc/mnttab) 86 7.2 NIS+术语 86 7.3 自动加载术语 87 7.3.1 自动加载程序 87 7.3.2 自动加载映射 87 7.4 自动加载映射和加载点 87 7.4.1 默认的自动加载映射 87 7.4.2 间接映射 90 7.4.3 直接映射 90 7.4.4 映射项目文法及快捷方式 91 7.5 自动加载程序如何工作 93 7.6 如何规划自动加载 95 7.6.1 推荐的自动加载策略 95 7.6.2 使用自动加载程序的预请求 96 第8章 设置自动加载程序 97 8.1 设置自动加载服务器系统 97 8.2 设置自动加载客户系统 97 8.3 显示有关NIS+自动加载映射信息 97 8.3.1 显示NIS+自动加载映射的格式 97 8.3.2 显示NIS+自动加载映射的内容 98 8.4 设置NIS+自动加载映射 98 8.4.1 设置auto_home映射 99 8.4.2 设置间接映射 99 8.4.3 设置直接映射 101 8.4.4 设置主映射 101 8.4.5 NIS+自动加载映射管理 102 第四部分 服务访问工具 第9章 了解服务访问工具 103 9.1 SAF优点 103 9.2 SAF精灵进程 104 9.3 SAF命令 104 9.4 SAF结构 105 9.4.1 init进程 105 9.4.2 服务访问控制器 105 9.4.3 端口监控程序 105 9.4.4 服务调用 107 9.4.5 端口监控程序状态 107 9.4.6 线路控制模型 108 9.4.7 uucp文件 112 9.4.8 SAF日志文件 113 9.5 SAF命令、任务和选项参考 114 9.5.1 SAF变量快速参考 114 9.5.2 服务访问控制(sacadm)快速参考 115 9.5.3 端口监控程序管理(pmadm)快速 参考 115 9.6 Admintool: Serial Ports和SAF 117 9.7 模板 117 9.8 启动Admintool: Serial Ports 117 第10章 设置调制解调器和字符终端 119 10.1 设置调制解调器和字符终端的工具 119 10.2 在SAF中使用变量 119 10.2.1 端口监控程序标签 120 10.2.2 服务标签 120 10.2.3 设备路径 120 10.2.4 波特率和线路规范 121 10.2.5 调制解调器类型 121 10.2.6 注释 121 10.3 设置调制解调器 121 10.3.1 硬件载波检测设置 121 10.3.2 调制解调器连接和开关设置 122 10.3.3 用于设置调制解调器的变量 123 10.3.4 调制解调器的 SAF 配置 123 10.3.5 调制解调器拨出服务配置 124 10.3.6 调制解调器连接疑难解答 124 10.3.7 使用Admintool: Serial Ports配置 调制解调器 125 10.4 设置字符终端的SAF 128 10.4.1 终端连接 128 10.4.2 字符终端的SAF配置 128 10.4.3 终端连接疑难解答 129 10.4.4 使用Admintool:Serial Ports添加 字符终端 130 10.4.5 初始化不配置端口 130 10.4.6 删除端口服务 131 第11章 设置打印服务 132 11.1 打印的新特性 132 11.1.1 打印包重新设计 132 11.1.2 打印协议适配器 133 11.1.3 SunSoft打印客户 133 11.1.4 增强的网络打印机支持 134 11.2 Solaris 2.6环境中的打印管理工具 134 11.3 打印服务器系统需求 135 11.4 打印机配置信息 135 11.4.1 打印机设备名 136 11.4.2 打印机名称 136 11.4.3 打印机端口 136 11.4.4 打印机类型 137 11.4.5 文件内容类型 137 11.4.6 打印过滤器 139 11.4.7 打印服务器统一地址 140 11.4.8 打印机描述(可选) 140 11.4.9 默认打印机(可选) 141 11.5 本地PostScript打印机设置 141 11.6 打印服务器设置 143 11.6.1 添加listen服务 143 11.6.2 创建listen服务 143 11.6.3 指定打印客户系统 144 11.7 打印客户设置 145 11.8 使用SunSoft打印客户 148 11.8.1 打印机配置资源 149 11.8.2 提交打印请求 149 11.8.3 SunSoft打印客户程序概述 149 11.8.4 使用Admintool设置打印客户 149 11.8.5 使用Admintool设置本地打印机 150 11.9 打印的问题 151 11.9.1 无输出(不进行打印) 152 11.9.2 不正确的输出 160 11.9.3 挂起LP打印服务命令 162 11.9.4 空闲(挂起)打印机 163 11.9.5 冲突状态消息 164 第五部分 应用软件 第12章 应用软件的安装和管理 167 12.1 应用软件的安装和管理概述 167 12.1.1 使用软件包命令 168 12.1.2 使用Admintool 168 12.1.3 使用安装脚本 169 12.2 用户对应用程序的访问 169 12.2.1 自动生成应用程序的环境 169 12.2.2 使用封装程序技术 171 12.2.3 设计一个应用程序服务器 173 12.2.4 安装并配置软件包 176 12.2.5 编写封装程序 177 12.2.6 使用公共命令目录 179 12.2.7 用户配置设置 180 12.2.8 了解发布的概念 181 12.3 CD-ROM的加载 182 12.3.1 使用一个本地CD-ROM(Solaris2.2 或之后的系统软件) 182 12.3.2 使用一个本地CD-ROM(Solaris2.2 或2.1系统软件) 182 12.3.3 访问一个远程CD-ROM中的 文件 183 第13章 程序包命令 185 13.1 命令行中的程序包命令 185 13.2 设置程序包的配置文件 185 13.2.1 设置安装基本目录(base directory) 187 13.2.2 安装程序包可使用不同的安装管理 文件 187 13.3 添加程序包 187 13.4 检查程序包的安装 191 13.5 列出程序包 192 13.6 删除程序包 192 13.7 程序包系统日志文件 194 第14章 Admintool:软件管理器 195 14.1 启动Admintool 195 14.2 安装软件 196 14.2.1 访问本地光盘中的文件 196 14.2.2 定制安装 197 14.2.3 开始安装 198 14.3 删除软件 199 第15章 安装和管理系统软件补丁程序 200 15.1 补丁程序的发布 200 15.1.1 如何得到Sun的补丁程序 201 15.1.2 在Web页中得到补丁程序 201 15.1.3 使用ftp来得到补丁程序 202 15.2 补丁程序的编号 202 15.3 安装一个补丁程序 202 15.4 删除补丁程序 203 第六部分 shell编程介绍 第16章 编写shell脚本 205 16.1 基本概念 205 16.1.1 介绍Bourne、Korn和C shell 205 16.1.2 了解shell如何执行命令 206 16.1.3 命名shell脚本 207 16.1.4 标识shell 207 16.1.5 使脚本可执行 207 16.1.6 存储shell脚本 208 16.1.7 编写shell脚本程序 208 16.2 变量 208 16.2.1 shell变量 208 16.2.2 内置shell变量 211 16.2.3 环境变量 214 16.3 输入和输出 214 16.3.1 标准输入、标准输出和标准 错误 215 16.3.2 命令行输入 216 16.3.3 交互输入 218 16.3.4 here文档 219 16.3.5 生成输出 219 16.3.6 命令替换 220 16.4 条件判断 221 16.4.1 if-then-else-elif 221 16.4.2 if-else-else if-endif 222 16.4.3 嵌套的if结构 223 16.4.4 多重分支 223 16.5 流程控制 225 16.5.1 使用for/foreach循环 225 16.5.2 使用while循环 226 16.5.3 使用until循环 228 16.5.4 跳出循环 228 16.6 退出状态 228 16.7 数学运算 229 16.8 用户自定义函数 230 16.9 调试shell脚本 231 16.9.1 使用调试标志 231 16.9.2 了解shell文法解析顺序 233 第17章 参照表和例子脚本 235 17.1 参照表 235 17.1.1 环境文件 235 17.1.2 脚本的首行 235 17.1.3 Korn shell的目录运算符 235 17.1.4 C shell中的变量修改符 235 17.1.5 由shell初始化的变量 235 17.1.6 shell的内置命令 236 17.1.7 Brurne和Korn shell中的重定向 237 17.1.8 C shell中的重定向 237 17.1.9 C shell中的$argv的表示法 237 17.1.10 引用 238 17.1.11 无字符的语法 238 17.1.12 关于变量的shell语法 238 17.1.13 I/O重定向和管道功能 238 17.1.14 将输出显示到屏幕中 239 17.1.15 从键盘得到输入 239 17.1.16 数字和计算 239 17.1.17 命令替换 239 17.1.18 代字号(~)的展开 239 17.1.19 关于别名的语法 239 17.1.20 有关历史记录的语法 239 17.1.21 函数语法 240 17.1.22 编程中控制语句的语法 240 17.1.23 判断和C shell中的内置判断 命令 240 17.1.24 Bourne shell的数学运算符 241 17.1.25 C shell的数学运算符 241 17.2 例子脚本 241 17.2.1 匿名ftp的脚本 241 17.2.2 arch.sh.fctn函数 247 17.2.3 array.sh.fctn函数 248 17.2.4 hostname.sh.fctn函数 256 17.2.5 osr.sh.fctn函数 256 17.2.6 whoami.sh.fctn函数 257 第七部分 系统安全 第18章 理解系统安全 259 18.1 Solaris 2.6中新的安全特征 259 18.1.1 验证服务模块插件 259 18.1.2 可执行的堆栈和安全性 259 18.2 系统安全概述 260 18.2.1 维护系统的物理安全 261 18.2.2 维护登录和访问控制 261 18.2.3 限制对文件中数据的访问 261 18.2.4 维护网络控制 261 18.2.5 监视系统的使用 261 18.2.6 设置正确的路径变量 261 18.2.7 监视setuid程序 262 18.2.8 安装防火墙 262 18.2.9 报告安全问题 262 18.3 文件安全 262 18.3.1 用户类 263 18.3.2 文件许可权 263 18.3.3 目录许可权 263 18.3.4 表示许可权的八进制数 263 18.3.5 默认掩码 264 18.3.6 文件类型 264 18.3.7 文件管理命令 265 18.3.8 文件的特殊许可权 267 18.3.9 访问控制列表 271 18.4 网络安全 277 18.4.1 防火墙系统 278 18.4.2 身份验证和授权 278 18.4.3 共享文件 281 18.4.4 限制超级用户的访问权限 282 18.4.5 使用特权端口 283 18.4.6 自动安全增强工具 283 第19章 使用身份验证服务 284 19.1 DES加密 284 19.2 Diffie-Hellman身份验证 284 19.2.1 Diffie-Hellman身份验证是如何 工作的 285 19.2.2 管理Diffie-Hellman身份验证 286 19.3 Kerberos Version 4 290 19.3.1 Kerberos身份验证如何和NFS一起 工作 290 19.3.2 管理Kerberos 4的身份验证 291 19.4 身份验证服务模块插件 293 19.4.1 PAM模块的类型 293 19.4.2 堆积特性 293 19.4.3 密码对应特性 293 19.4.4 PAM是如何工作的 293 19.4.5 PAM的配置文件 294 19.4.6 有效的服务名称 295 19.4.7 控制标志 295 19.4.8 PAM的使用计划 298 19.4.9 配置PAM 298 第20章 使用自动安全增强工具 300 20.1 ASET的任务 300 20.2 ASET的控制文件 300 20.3 ASET的安全等级 301 20.4 ASET是如何工作的 301 20.4.1 系统文件访问权限的审核 302 20.4.2 系统文件检测 302 20.4.3 用户/组检验 302 20.4.4 配置文件的检验 303 20.4.5 环境的检查 303 20.4.6 eeprom检测 303 20.4.7 防火墙的设置 303 20.5 ASET的执行记录 304 20.6 ASET的结果报告 305 20.6.1 报告文件的格式 306 20.6.2 检测和对比报告文件 306 20.7 ASET的控制文件 306 20.7.1 tune文件 307 20.7.2 uid_aliases文件 310 20.7.3 检测列表文件 310 20.8 ASET的环境文件 310 20.8.1 ASET shell环境变量 313 20.8.2 PERIODIC_SCHEDULE变量 313 20.8.3 TASKS变量 314 20.8.4 UID_ALIASES变量 314 20.8.5 YPCHECK变量 314 20.8.6 CKLISTPATH_level变量 314 20.9 运行ASET 314 20.9.1 交互式地运行ASET 314 20.9.2 定期地运行ASET 317 20.9.3 终止定期地运行ASET 318 20.9.4 将报告集中到服务器 318 20.10 恢复被ASET更改的文件 319 20.11 ASET的错误信息 320 附录A 卷管理 322 附录B Solaris服务器企业内联网扩充 产品 334 术语表 365

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值