版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章R语言简介1.1概述1.5更新R-base、程序包和RStudio1.2前期准备1.6获取帮助1.3使用RStudio:极简入门1.7练习案例1.4程序包的管理1.8小结1.1概述1.1概述1.1.1R语言是什么R语言是一种用于统计分析和数据可视化的编程语言与环境,由RCoreTeam开发,并由RFoundation提供支持和维护服务。R语言由统计学家RossIhaka和RobertGentleman于1993年在新西兰奥克兰大学开发,其设计灵感源自JohnChambers等人在贝尔实验室(原AT&T)开发的S语言R语言发展成熟、简单易用,具备高效的数据处理和存储能力、用于数组计算的运算符、用于数据分析和展示的图形设施,支持屏幕显示和打印输出,现已被数据挖掘者、生物信息学家和统计学家广泛应用于数据处理与分析。截至2025年5月,R语言在TIOBE(TheImportanceofBeingEarnest)指数(衡量编程语言流行度的指标)中排在第12位。1.1概述1.1.1R语言是什么“环境”一词意味着R语言是一个经过完整规划且连贯一致的系统,它可以通过大量的扩展包来增加可用的代码和文档。这与其他数据分析软件不同,后者通常由众多非常具体但不灵活的功能积累而成。部分数据分析软件只能执行特定的预定义任务,而不能根据用户需求进行定制。相比之下,R语言允许用户通过编写代码来定义新函数,从而根据自己的需求定制分析过程。R语言发行版附带了基础软件包,而通过CRAN(ComprehensiveRArchiveNetwork)还可以获取更多可用的软件包,这些软件包涵盖了广泛的现代统计学领域。R语言以源代码形式提供免费软件,并遵循自由软件基金会的GNU通用公共许可证条款。它可以在UNIX系统及其类似系统(包括FreeBSD和Linux)、Windows系统和macOS系统上编译与运行。1.1概述1.1.1R语言是什么R语言可以通过不同的用户界面来运行和编辑,这些界面提供了不同的特点和优势。除了R语言默认的命令行界面,还有多种第三方用户界面可供选择。RStudio是最受欢迎的R语言集成开发环境之一,相比于默认的命令行界面,它更适合复杂的项目开发和管理;Jupyter提供了笔记本界面,便于展示和分享分析结果与过程;VisualStudioCode则可以通过安装扩展来支持R语言,具有丰富的编程辅助功能。这些用户界面都可以帮助用户更高效地使用R语言进行数据分析和可视化,用户可以根据自己的需求和喜好来选择合适的用户界面。1.1概述1.1.2为什么选择R语言ThebestthingaboutRisthatitwasdevelopedbystatisticians.——BoCowgillR语言是为统计分析而生的编程语言。R语言拥有许多特质,使其成为高校师生、统计学家、生物信息学家,以及任何希望轻松、高效分析数据的人群的理想选择。免费且开源。任何人都可以下载、使用、修改、共享R语言,并为R语言及其扩展包的开发做出贡献,而没有任何成本与限制。丰富的数据结构,如向量、矩阵、列表、数据框和因子。这些数据结构允许用户以一致且高效的方式存储和操作不同类型的数据。还可以对它们执行各种操作,如索引、取子集、排序、聚合和连接。1.1概述1.1.2为什么选择R语言灵活的语法。R语言允许用户编写富有表现力且简洁的代码。可以使用运算符、函数、循环、条件语句和其他结构创建复杂的表达式与算法,还可以编写函数。大量的扩展包,可扩展R语言的功能并为各领域提供专门的函数。例如,可以使用forecast包进行时间序列预测,或者使用survival包进生存分析。轻松创建并导出高质量的图形。可以使用graphics内置包快速创建基本图形,如散点图、直方图、箱线图和条形图;也可以使用ggplot2扩展包创建可灵活定制的图形,通过设置标题、标签、图例、颜色和其他选项进行图形自定义。还可以将图形导出为多种格式的文件,如.pdf、.png、.tiff等。1.1概述1.1.2为什么选择R语言与其他语言和软件的集成能力强。用户可以在R语言中调用其他语言的函数或库,或者访问、操作来自其他统计分析软件的数据。例如,可以使用reticulate包调用Python函数;也可以使用foreign包读取SPSS的.sav文件、Stata的.dta文件等其他来源的数据文件。活跃的用户和开发者社区,为R语言发展做出贡献并提供支持和资源。许多在线教程、书籍、课程、博客、论坛都可以帮助用户学习和提高R语言技能,用户还可以在StackOverflow等平台上提问并得到其他R语言用户的回答。1.2前期准备1.2前期准备在开始使用R语言探索数据之前,需要将其安装到计算机上。RStudio是一个功能强大且用户友好的集成开发环境(IntegratedDevelopmentEnvironment,IDE),可以轻松地创建、编辑、调试和运行R语言脚本,并管理项目。1.2.1下载并安装R语言安装R语言需要遵循以下步骤:(1)访问CRAN官网。(2)在CRAN主页中,选择适用于操作系统(Linux、macOS或Windows)的链接。1.2前期准备以下是不同操作系统的安装步骤:Windows系统:单击“DownloadRforWindows”链接。单击“base”链接或“installRforthefirsttime”链接。单击“DownloadR-X.Y.ZforWindows”链接(X.Y.Z代表R语言的当前最新版本),并保存.exe文件。运行.exe文件并按照安装说明进行操作。1.2前期准备macOS系统:单击“DownloadRformacOS”链接。单击“Latestrelease”下包含R语言最新版本的文件链接,并保存.pkg文件。运行.pkg文件并按照安装说明进行操作。Linux系统:按快捷键“Ctrl+Alt+T”或在应用程序启动器中搜索“Terminal”来打开终端窗口。在终端窗口中使用相应代码安装R-base(演示)。运行代码后,将出现确认提示,使用“Y”或“y”来回答“Yes”。1.2前期准备1.2.2下载并安装RStudioRStudioIDE有两种不同的选择,即RStudioDesktop和RStudioServer,二者均提供了开源版和商业版。RStudioDesktop是在本地计算机上运行的RStudioIDE,无须设置和维护远程服务器,对于个人使用更加方便;RStudioServer是在远程服务器上运行并通过浏览器访问的RStudioIDE版本,在需要团队内部协作、资源共享或处理大型数据集、执行计算密集型任务时更加有用。安装R语言后,进行开源版RStudioDesktop的安装。(1)访问DownloadRStudio官网。(2)下滑页面至“AllInstallersandTarballs”部分,单击适用于操作系统的链接。1.2前期准备Windows系统:单击RStudio的Windows版本链接并保存.exe文件。运行.exe文件并按照安装说明进行操作。macOS系统:单击RStudio的macOS版本链接并保存.dmg文件。打开.dmg文件并将RStudio图标拖曳到“应用程序”文件夹中。Linux系统:按快捷键“Ctrl+Alt+T”或在应用程序启动器中搜索“Terminal”来打开终端窗口。在终端窗口中使用相应命令下载并安装gdebi包(演示)。运行命令后,将出现安装确认提示,使用“Y”或“y”来回答“Yes”。在终端窗口中使用相应命令安装.deb包(演示)。1.3使用RStudio:极简入门1.3使用RStudio:极简入门1.3.1RStudio界面导览RStudio界面由4个子窗口组成(演示)。(1)“编辑器”窗口:用于创建、运行和保存脚本,也用于查看数据集。(2)“控制台”窗口:用于输入和执行单个命令,并查看结果。当在“编辑器”窗口中运行脚本时,其输出也将出现在“控制台”窗口中。(3)“环境”窗口:“Environment”选项卡用于显示当前可用的数据集和对象;“History”选项卡用于显示以前运行的命令;“Connection”选项卡用于提供有关连接的信息等。1.3使用RStudio:极简入门1.3.1RStudio界面导览RStudio界面由4个子窗口组成(演示)。(4)“打印、查看器、包和帮助”窗口:用于显示工作路径中的文件和文件夹、R语言生成的图形、帮助文档等。在RStudio菜单栏中,通过选择“Help”→“CheatSheets”选项,可以获取关于RStudio界面更为详细的介绍、输入与运行脚本的快捷键,以及更多常用功能的快速参考指南。1.3使用RStudio:极简入门1.3.2创建R语言项目.Rproj文件是RStudio项目的文件,用于在RStudio中定义项目数据,它包含与当前工作相关的所有文件和设置,如脚本文件、数据文件和输出文件等。当在RStudio中打开.Rproj文件时,它会自动将工作目录设置为项目目录,并恢复项目的先前会话(如果可用),这可以轻松地在不同项目之间切换并继续上次的工作。RStudio项目还具有许多实用功能,如程序包的构建和管理,这些功能有助于高效管理工作。1.3使用RStudio:极简入门1.3.2创建R语言项目以下是在RStudio中创建.Rproj文件的步骤。(1)启动RStudio,选择“File”→“NewProject”选项。(2)在弹出的NewProject”对话框中,选择“NewDirectory”选项,在新目录中创建新项目,或者选择“ExistingDirectory”选项,在现有目录中创建新项目。(3)如果选择“NewDirectory”选项,则请为新目录设置名称并单击“Browse”按钮选择其位置。如果选择“ExistingDirectory”选项,则请单击“Browse”按钮并导航至要在其中创建新项目的目录(演示)。(4)单击“CreateProject”按钮创建新项目。1.3使用RStudio:极简入门1.3.3创建R语言脚本创建新项目后,在这个新项目中创建R语言脚本。(1)创建完项目后,RStudio将自动打开新项目。也可以通过选择“File”→“OpenProject”选项,在弹出的对话框中导航至test.Rproj文件夹并打开该项目。(2)选择“File”→“NewFile”→“RScript”选项,在“编辑器”窗口中打开一个新的、空白的脚本。(3)在“编辑器”窗口中键入或粘贴代码。(4)选择“File”→“Save”选项,弹出对话框,在test.Rproj文件夹目录中为脚本设置保存名称和位置。新脚本现在已保存在test.Rproj项目中。1.4程序包的管理1.4程序包的管理程序包(package)就像一个个工具箱,可以使用它来创造惊人的作品。但需要先学习一些基本技能:程序包的安装、加载、卸载与删除。1.4.1安装程序包程序包是预创建的函数、数据和已编译代码的集合,它可被视为一个工具箱,其中包含用于特定任务或主题的有用工具。安装程序包是向R语言中添加新功能的方式,就像在手机或计算机上安装应用程序一样,只需要安装一次,就可以随时使用已安装的程序包。1.4程序包的管理1.4.1安装程序包以下是5种常见的程序包安装方法。(1)通过CRAN及其镜像等安装程序包(演示)。(2)通过Bioconductor安装程序包。有些程序包仅能通过Bioconductor安装(演示)。(3)通过GitHub安装程序包(演示)。(4)从本地安装程序包。安装dplyr包,需要预先下载dplyr包的压缩文件,再运行相应命令(演示)。(5)使用RStudio安装程序包。
如安装dplyr包,可选择“Tools”→“InstallPackages”选项,弹出“InstallPackages”对话框。在“Installfrom”下拉列表中选择“Repository(CRAN)”选项,在“Packages”文本框中输入“dplyr”,保留“Installdependencies”复选框的勾选状态,单击“Install”按钮。1.4程序包的管理1.4.2加载程序包安装程序包后,需要对其进行加载,之后才能使用其中的函数、数据和已编译代码(演示)。1.4.3卸载与删除程序包当不同程序包之间存在冲突的函数时,需要卸载可疑的程序包进行调试(演示)。detach()使指定程序包中的函数和数据在当前会话中不再可用。但该程序包仍然安装在系统中,并且可以使用library()再次加载程序包。如果需将指定程序包从系统中完全删除,则需要使用remove.packages()(演示)。运行相应命令后,dplyr程序包将不再可用,除非使用install.packages()等函数再次安装它。1.4.4其他实用函数(演示)1.4程序包的管理1.4.5安装程序包的常见问题与解决方案在安装程序包时可能遇到错误或警告,致使无法正常使用所需的程序包。1.package'xxx'isnotavailableforthisversionofR造成这一警告的常见原因包括:(1)程序包名称拼写错误。程序包名称(包括字母大小写)需与官方名称保持完全一致。(2)程序包与当前R语言版本不兼容(演示)。(3)当前程序包在CRAN中不可用。虽然CRAN是程序包的主要存储库,但也有一些程序包并不在CRAN中发布。如果试图安装的程序包在CRAN中不可用,则需指定不同的存储库(有些程序包仅能通过Bioconductor安装),或者下载该程序包的压缩文件后从本地安装程序包。1.4程序包的管理1.4.5安装程序包的常见问题与解决方案2.installationofpackage'xxx'hadnon-zeroexitstatus这一警告仅提示了指定程序包未能安装,但原因十分复杂,在不同操作系统中也可能存在差异。常见原因包括:(1)依赖项不可用。检查控制台输出是否提示“dependencies‘yyy’,‘zzz’arenotavailable”。这种情况通常发生在使用旧版本的R-base时,此时需要根据提示安装依赖项,即安装xxx程序包所需的yyy与zzz程序包,而且很可能需要为其安装指定的兼容版本。1.4程序包的管理1.4.5安装程序包的常见问题与解决方案2.installationofpackage'xxx'hadnon-zeroexitstatus(2)更新依赖项受阻。检查控制台输出是否提示“namespace‘yyy’x.y.zisbeingloaded,but>=x.y.zisrequired”。如果提示,则表明安装当前程序包需要对依赖的程序包进行更新,但由于依赖的程序包已被加载,因此更新失败。此时需要先使用“detach("package:yyy",unload=TRUE)”将依赖项暂时卸载,再尝试进行xxx程序包的安装。更简单的解决方法是先直接重启R软件,再尝试进行xxx程序包的安装。1.4程序包的管理1.4.5安装程序包的常见问题与解决方案2.installationofpackage'xxx'hadnon-zeroexitstatus(3)缺少Rtools或版本不正确。检查控制台输出是否提示“Warninginsystem(cmd):‘make’notfound”。如果提示,则表明make.exe未安装或未包含在系统的PATH中。对于Windows用户,若要从源代码构建和编译程序包(即具有.tar.gz后缀的压缩文件),则需要安装Rtools来实现。此时,需要访问cran.r-project网站获取并安装与R-base版本对应的Rtools。安装Rtools后,可以在cmd中使用“echo%PATH%”查看make.exe是否已添加到PATH中。1.5更新R-base、程序包和RStudio1.5更新R-base、程序包和RStudio保持最新版本的R-base、程序包RStudio,有助于提高R语言环境的稳定性、性能和安全性。1.5.1更新R-base和程序包由于R语言在不断更新版本,用户下载并安装R-base后,需要对其版本进行更新。以Rversion4.2.1为例,在R语言的版本编号规则中,第一个数字4表示主要版本,第二个数字2表示次要版本,而第三个数字1表示补丁级别。当R语言从一个补丁级别升级到下一个补丁级别时,如从4.2.1升级到4.2.2,更改通常非常小,此时可继续使用当前已安装的程序包,而无须执行额外操作。然而,当R语言从一个次要版本升级到下一个次要版本的,如从4.2.3升级到4.3.0,除了R语言自带的基础程序包,其他程序包通常均需要更新至最新版本。1.5更新R-base、程序包和RStudio1.5.1更新R-base和程序包对于Windows、macOS和Linux系统,更新R-base和程序包存在差别。1.Windows系统(演示)installr::updateR()将一站式地完成以下操作:查找、下载并安装最新版本的R语言;将旧版本R语言中安装的程序包复制到新版本R语言中对应的程序包安装目录下;对于可以在CRAN中获取的程序包,根据新版本的需要进行更新。1.5更新R-base、程序包和RStudio1.5.1更新R-base和程序包2.macOS系统推荐的方法是在手动更新R-base后,通过RStudio进行程序包的更新。(1)按照下载并安装R软件的指引,完成最新版本的R-base的安装。(2)启动或重启RStudio,它将自动使用R语言的更新版本;也可以使用R.Version()来检查当前版本。(3)在RStudio菜单栏中,选择“Tools”→“CheckforPackageUpdates”选项,在弹出的对话框中勾选“SelectAll”复选框,单击“InstallUpdates”按钮完成更新。1.5更新R-base、程序包和RStudio1.5.1更新R-base和程序包3.Linux系统(1)按快捷键“Ctrl+Alt+T”或在应用程序启动器中搜索“Terminal”来打开终端窗口。(2)在终端窗口中运行相应命令,将CRAN库添加到系统的源列表中(演示)。(3)在终端窗口中运行相应命令,将CRANGPG密钥添加到系统中,以验证CRAN库的身份(演示)。(4)在终端窗口中运行相应命令,更新Ubuntu系统中的可用软件包列表(演示)。(5)在终端窗口中运行相应命令,安装或更新R语言(演示)。(6)在终端窗口中运行“R--version”来验证R语言是否已经更新。1.5更新R-base、程序包和RStudio1.5.2更新RStudio1.Windows与macOS系统(1)打开RStudio,在菜单栏中选择“Help”→“CheckforUpdates”选项,如果有可用的更新,则请按照提示下载并安装最新版本的RStudio,也可进入RStudio官网直接下载最新版本。(2)退出并重启RStudio,以完成更新过程。2.Linux系统(1)按快捷键“Ctrl+Alt+T”或在应用程序启动器中搜索“Terminal”来打开终端窗口。(2)在终端窗口中运行相应命令,将RStudio库添加到系统的源列表中(演示)。1.5更新R-base、程序包和RStudio1.5.2更新RStudio2.Linux系统(3)在终端窗口中运行相应命令,将RStudioGPG密钥添加到系统中,以验证Rstudio库的身份(演示)。(4)在终端窗口中运行相应命令,更新Ubuntu系统中的可用程序包列表(演示)。(5)在终端窗口中运行相应命令,更新RStudio(演示)。(6)打开RStudio,选择“Help”→“AboutRStudio”选项打开版本信息窗口,检查显示的版本号是否与官网最新的版本号一致,以验证是否已更新。1.6获取帮助1.6获取帮助学习R语言具有一定的挑战性,在使用过程中可能遇到各种各样的问题和错误,但是目前已有多种资源和工具可用来帮助用户提高R语言的使用技能。1.6.1查看说明文档了解某函数包含哪些参数,或者如何设定参数的值,可以使用R语言提供的用于获取帮助的基础函数。例如,运行“?function_name”或“help(”function_name“)”可以查阅该函数的说明文档(演示)。1.6获取帮助1.6.2在社区中查找解决方案或提问如果未能解决问题,则可以尝试使用搜索引擎,还可以在StackOverflow官网上提问,或者在特定程序包的GitHubrepository模块中的Issues上发起新提问。在提问时,应注意以下几个问题:(1)尽可能准确、全面地描述问题。(2)如果怀疑问题与操作系统有关,则建议提供sessionInfo()返回的信息。(3)提供最小可工作案例(MinimalWorkingExamples,MWE)。MWE用于通过尽可能简洁的数据或代码重现相同的问题。提供MWE可以使别人更好地了解你遇到的问题,并提供相应的帮助(演示)。1.7练习案例(演示)1.8小结1.8小结介绍R语言和RStudio的基础知识,初步展示了如何使用强大的数据处理和统计分析工具。概述R语言及其在统计计算和图形生成中的应用,强调其开源、灵活的特点。介绍R语言的安装与配置,包括如何在不同操作系统中安装R语言及其集成开发环境RStudio,确保在计算机上顺利运行R代码。介绍RStudio的基本知识,如界面布局、脚本编辑与执行、控制台操作等。在程序包的管理部分中,详细讲解了如何安装、加载、卸载与删除R语言的程序包,以及如何使用这些程序包来增强数据处理和分析的能力。介绍如何更新R-base、程序包和RStudio,确保软件的最新功能可以被充分利用。在获取帮助部分中,提供了多种途径来解决编程中遇到的问题,包括查看说明文档、在社区中查找解决方案或提问等。1.8小结本章重要函数函数程序包作用主要用法install.packagesutils安装程序包install.packages("pkgs",lib,repos=getOption("repos"),dependencies=NA,...)librarybase加载程序包library(pkg)detachbase卸载程序包detach("package:pkg",unload=TRUE)remove.packagesbase删除程序包remove.packages("pkg")helpbase查看函数的帮助文档help("function")vignettebase查看程序包的示例文档vignette(package="pkg")谢谢第2章数据管理2.1数据结构2.8数据排序2.2数据的输入和输出2.9数据集取子集2.3函数2.10数据集合并2.4创建新变量2.11数据整合与重构2.5变量重编码2.12
练习案例2.6变量重命名2.13小结2.7数据类型的查看和转换第2章数据管理数据管理在R语言中起着非常重要的作用。通过数据管理,用户可以对数据进行有效的整理和处理,为统计分析和建模做好准备。本章将详细介绍R语言中各种常用的基本数据结构和数据管理操作。学习本章后,读者将会对R语言中的基本数据结构有基本的理解和认识,并且能够应对各种数据管理的挑战。2.1数据结构2.1数据结构数据结构是数据的容器,也是R语言中数据管理的基本单元。数据的结构不仅决定了如何进行数据的存储、组织和访问,还影响着数据管理的性能和效率。2.1.1基本数据结构速览R语言中的基本数据结构包括向量、因子、矩阵、数据框、数组、列表等(演示)。数据通常按其维度(一维、二维或三维)和是否同质(所有元素必须为相同类型或元素可以为不同类型)进行组织。元素(element)是存储在数据结构中的单个值或对象。在一维数据结构中,元素按顺序依次排列;在二维数据结构中,元素以带有行和列的表格格式排列;在多维数据结构中,元素按多维网格排列。2.1数据结构2.1.2向量1.向量的结构向量是一维数组,可存储数值型(numeric)、字符型(character)、逻辑型(logical)数据。单个向量中的元素必须是相同类型的信息(演示)。2.访问向量使用索引可访问向量中的元素。索引包括整数索引、逻辑索引和字符索引。如果向量具有名称属性,则字符索引返回具有匹配名称的元素(演示)。2.1数据结构2.1.3因子因子是一种表示类别的向量,可分为有序因子和无序因子。有序因子中各元素存在固有的顺序;无序因子则没有这种顺序。因子决定了数据的呈现和分析方式,它在R语言中非常重要。1.因子的结构factor():创建因子。在默认情况下,factor()将向量转换为无序因子,即没有固有的顺序或等级。要想创建有序因子,则需要指定该函数的两个参数ordered=TRUE和levels=c(“lev1”,“lev2”,…)。ordered参数指定因子是有序的,而levels参数指定从最低到最高的级别顺序。访问因子元素的方式与访问向量元素的相似(演示)。2.判断因子is.factor():判断某向量是否为因子(演示);is.ordered():检查因子是否有序(演示)。2.1数据结构2.1.4矩阵矩阵是一种二维数据结构,由按行和列排列的矩形元素组成,其每个元素都为相同的类型(数值型、字符型、逻辑型)。矩阵不仅可在需要对数据进行数学运算时使用,还可用于表示线性方程组、图形和其他数学对象。1.矩阵的结构matrix():将输入的向量重塑为具有指定行数和列数的矩阵(演示)。2.访问矩阵使用行和列索引可访问矩阵中的元素。访问特定行和列元素的命令是matrix[row,column]。若要访问整行,则可以使用matrix[row,];若要访问整列,则可以使用matrix[,column](演示)。使用单个索引访问矩阵中的元素。当使用单个索引时,矩阵中的元素被视为在一个向量中,按列顺序排列(演示)。2.1数据结构2.1.5数据框数据框是一种二维数据结构,主要用于存储和处理表格数据。数据框与矩阵类似,但它可以拥有不同类型的列,如单个数据框可以由数值列、字符列、因子列等构成。数据表(datatable)是数据框的扩展,其属于data.table程序包中的数据结构,需要下载和加载data.table程序包后才可进行使用。data.table程序包具有强大的性能优势,包括快速的文件读写、灵活的数据处理和聚合、简洁的语法等,可用于高效处理和分析数据。与base程序包中的数据框相比,数据表在处理大型数据集时具有更高的性能和更低的内存消耗。data.table程序包采用基于哈希的数据存储和索引方法,从而能快速实现数据筛选、汇总和合并等操作。此外,data.table程序包还提供了丰富的函数,使用户可以更加灵活地进行数据操作和计算。2.1数据结构2.1.5数据框1.数据框和数据表的结构数据框和数据表都由一系列元素长度相等且允许数据类型不同的向量(列)组成,每一行数据都为一个观测(演示)。2.访问数据框和数据表访问数据框和数据表的元素、行、列与访问矩阵的方式基本相同。相比通过列整数索引,通过列名称索引访问元素是一种更明确且易读的方式(演示)。3.数据框和数据表的运算效率相比数据框,数据表提供了更快的索引和数据处理功能,在处理大型数据集时具有更高的运算效率(演示)。2.1数据结构2.1.6数组数组是R语言中的一种多维数据结构,它可以在三个维度中存储相同类型的数据。1.数组的结构在数组中,数据以矩阵的形式存储。数组可以被视为矩阵的集合,数组中的每个矩阵都按行和列组织。例如,将sex_ft、edu_ft两个因子向量集合为一个数组,使用dim参数设置数组的行数、列数和层数(演示)。2.访问数组array[row,col,matrix]:可指定要访问元素所在的行、列和矩阵(演示)。2.1数据结构2.1.7列表列表是R语言中最复杂的数据类型,是各种数据类型的有序集合,其可包含单个或若干元素、向量、矩阵、数组、数据框、数据表、列表。1.列表的结构list():把同质或异质的数据组合成一个列表(演示)。2.访问列表对于列表,当使用单个方括号“[]”访问列表的元素时,返回结果是包含该元素的子列表;当使用双方括号“[[]]”访问列表的元素时,返回结果是该元素本身(演示)。除了使用数字索引访问列表的元素,如果列表的元素具有名称,则还可以使用名称索引(演示)。2.1数据结构2.1.8数据类型的层次结构在R语言中,不同类型的元素存在层次结构,从最低到最高依次为:逻辑值(logical)、整数(integer)、数值(double)、复数(complex)、字符(character)、列表(list)。除了数据框、数据表与列表,在其他数据结构中,所有元素必须为相同类型(演示)。如果将不同类型的元素组合成向量,则结果向量的类型将被强制转换为元素中存在的最高层次类型。2.2数据的输入与输出2.2数据的输入和输出2.2.1数据的输入数据分析的第一步是导入待分析的数据。使用data.table程序包中的fread()能够导入多种文件类型的数据,如CSV文件(.csv)、Excel文件(.xlsx)、SAS文件(.sas7bdat)等,文件导入后使用str()可查看每个变量的数据类型(演示)。与使用base程序包中的read.csv()读取数据文件相比,使用fread()的优势在于读取速度非常快,特别是在读取大数据文件时(演示)。2.2.2数据的输出data.table程序包中的fwrite()用于将数据从R语言中导出到文件里,同样地,与base程序包中的write.csv()相比,fwrite()的保存速度更快(演示)。2.3函数2.3函数2.3.1概念R语言中函数(function)是十分重要的操作方法,形式为function_name(),括号里是函数的参数,通过设置参数,运行命令后可得到相应的结果。data.table程序包中的order()能快速对数据进行升/降序排列(演示)。2.3.2数据管理常见函数在R语言编程中包含着不同种类和功能的函数,表2.4、表2.5、表2.6和表2.7分别列出了4种不同类型的常用函数。使用abs()、sqrt()、ceiling()、floor()可进行常规数学运算,使用mean()和sd()分别计算data1中研究对象年龄的平均值与标准差(演示)。分布函数用于生成特征已知的模拟数据,以及在统计函数中计算概率值(演示)。stringr程序包还提供了许多函数来帮助用户进行字符处理(演示)。2.3函数2.3.3函数查询仅理解函数的意义可能不足以完全掌握其作用,通过查询函数可快速了解函数的定义和用途、各种参数的解释与函数源代码。在“打印、查看器、包和帮助”窗口“Help”选项卡的搜索栏中直接输入想要了解的函数名称,按回车键,窗口即可呈现函数的说明,如输入“chisq.test”进行查询(演示)。在“控制台”窗口的“Console”选项卡中输入“?函数名称”,“打印、查看器、包和帮助”窗口的“Help”选项卡中可显示该函数的说明(演示)。2.4创建新变量2.4创建新变量2.4.1变量命名规则和赋值方式变量名称只能由字母、数字、下画线组成,不能含有运算符。“<-”为赋值符号,表示将后者赋值给前面的变量(演示)。+、*、/、^等为常见的运算符,不能在变量名称中使用(演示)。变量名称不能以数字开头(演示)。2.4.2常用的运算符R语言中常用的运算符包括算术运算符、逻辑运算符、关系运算符等,熟悉这些运算符在数据管理和分析过程中非常重要(演示)。筛选出data1中年龄大于或等于70岁且小于85岁的研究对象,可用逻辑运算符&来表达(演示)。若想进一步剔除教育状况为高中及以上的人群,可运用逻辑运算符!来表达(演示)。2.4创建新变量2.4.3data.table程序包利用data.table程序包可以对大数据信息进行快速访问,并对行和列进行快速运算,进而高效地创建出新变量。data.table程序包提供了十分简洁的语法(演示)。2.5变量重编码2.4变量重编码在实际操作中,可以通过创建新变量的方式对现有变量进行转换,也可以通过变量重编码来实现。将连续型变量转换为分类变量,如年龄、身体质量指数等(演示)。将错误值更改为正确值或删除,筛选出缺失值重新编码或另作处理(演示)。基于原数据定义新的变量,如根据收缩压和舒张压定义新的变量,将研究对象划分为正常、低血压或高血压(演示)。对于日期形式的数据,使用as.Date()将其转换为以数值形式存储的时间变量(演示)。2.6变量重命名2.6变量重命名有时变量名可能不够直观或存在歧义,需要对其进行修改。通过names()查看变量名称(演示)。data.table程序包中的setnames()可用于变量重命名(演示)。直接赋值新的变量名也可重命名变量(演示)。除了上面的3种方法,还可以通过fix(data1)语句调用一个交互式编辑器来修改变量名(演示)。2.7数据类型的查看和转换2.7数据类型的查看和转换2.7.1查看数据类型str()能够紧凑地显示任意对象的内部结构,其函数结果简洁地展示了数据的内部结构、内部嵌套的数据类型和数据摘要(演示)。在R语言中,可以使用class()查看数据类型。与str()不同的是,class()仅能返回某个对象本身的数据类型(演示)。base程序包中的is.datatype系列函数能够用于数据类型的判断(演示)。2.7.2数据类型的转换在R语言中,通常使用as.datatype系列函数对数据类型进行转换,as.datatype系列函数与is.datatype系列函数类似,根据数据类型的不同,有多种函数(演示)。2.8数据排序2.8数据排序2.8.1sort()sort()用于对数字、复数、字符或逻辑向量等R对象进行排序,其会对数据本身进行升序或降序排列,并按照大小顺序返回数据(演示)。2.8.2rank()rank()用于对数据本身进行升序排列,按照原本数据的位置顺序返回其对应的位次(演示)。2.8.3order()order()用于对数据本身进行排序,按照大小顺序返回该值在原数据中的位置索引(演示)。2.8.4setorder()使用data.table程序包中的setorder()可以对数据表进行快速排序(演示)。2.9数据取子集2.9数据取子集2.9.1基于变量提取、删除子集与访问数据表信息相同,可以通过“[]”提取子集。例如,在流行病学实际分析的过程中,常常需要根据分析需求,提取分析所需的患者信息(演示)。删除子集与提取子集相反,对于通过c()选择观测信息的,只需要在列数值之前添加“-”,就能把不需要的列删除;对于删除某观测变量的特定值,需要通过subset()进行删除(演示)。2.9.2基于条件取子集在处理大数据时,使用行号或列号提取、删除子集的效率往往比较低,如果清晰了解所需要提取的子集信息,则可以基于条件提取子集,提高效率(演示)。2.9数据取子集2.9.3保留非重复行当数据中出现重复录入的情况时,需要提取唯一数据进行分析。duplicated()用于判断某一列是否重复,并返回逻辑值(演示)。
unique()用于直接保留唯一数据(演示)。2.9.4基于条件取子集complete()和filter()可用于删除存在缺失值的行,其中complete(data/column)可以直接删除存在缺失值的数据或行,而filter(data,!is.na(columnname))则需要选择存在缺失值的列,并筛选出该列没有缺失值的数据(演示)。2.10数据集合并2.11数据整合与重构2.11.1转置转置,也就是反转行和列。通过t()对一个矩阵或者数据表进行转置(演示)。2.11.2分类汇总在R语言中可以将数据依据一个或多个变量并按一个预先定义函数进行分类汇总,该操作可通过aggregate()实现(演示)。aggregate()是base程序包提供的分类汇总基础函数,在实际数据处理中可使用data.table程序包中的data.table()快速实现分类汇总(演示)。2.11数据整合与重构2.11数据集合并2.10.1简单合并数据管理中常需要对某一数据表追加观测,或者将不同数据表进行纵向合并,在R语言中可通过rbind()实现(演示)。当需要向某一数据表中添加变量,或者需要对不同数据表进行横向合并时,可利用cbind()实现(演示)。2.10.2匹配合并merge()是一个非常强大的函数。在实际应用过程中,患者数据往往是通过id进行收集的,因此在数据合并过程中可以通过id进行匹配,并且可以选择感兴趣的数据进行合并(演示)。通过使用full_join()、left_join()、right_join(),可以根据需要保留未被匹配的数据(演示)。2.11数据整合与重构2.11.3融合数据融合是将数据按以下格式进行重构,即每个测量项目都独占一行,其他列信息保持不变,该操作可通过data.table程序包中的melt()实现(演示)。2.11.4重铸data.table程序包中dcast()可将“长格式”数据按照提供的公式进行重铸,将“长格式”数据转换为“宽格式”数据,使行数变少而列数增多(演示)。除了mean()、median()、sum()这些一般的计算函数,fun.aggregate还可以写入许多功能,如使用list()将多个计算函数组合,或者使用function()自定义更为复杂的函数(演示)。2.12练习案例2.12练习案例以下example.data数据框中有100位老年人的基本信息和健康体检结果,包括编号、性别、民族、年龄、教育程度,是否患有高血压、糖尿病或高脂血症,以及腰围,部分数据如表所示。请以该数据集为例,结合本章内容,完成以下操作:编号性别民族年龄教育程度高血压糖尿病高脂血症腰围1男性汉族[65,70)高中以上是否否852女性汉族[75,80)高中以下是否否803女性汉族[65,70)高中以上是否否804女性汉族[80,200]高中以上否否否815男性汉族[65,70)高中以下是是否866女性汉族[80,200]高中以下是否是85...........................练习案例数据框中的部分数据2.12练习案例将男性腰围大于或等于90cm,女性腰围大于或等于85cm定义为腹型肥胖,构造新的一列变量。将新构造的列名称改为“腰围分类”。将“编号”“腰围”两列数据转换为数值型,其他列数据转化为因子。将数据框按腰围由小到大排列。在数据框中取“编号”“高血压”“糖尿病”“高脂血症”4列,构建新数据框example.data1。构造新数据框example.data2,其中包含各体检对象的体检地点和身高信息,并以编号为索引,合并example.data数据框和example.data2数据框。将数据框融合为“长格式”,每行表示各体检对象的每个测量项目结果。汇总不同性别和体检地点的体检人群的腰围与身高的平均值。2.13小结本章介绍了R语言中多种多样的数据类型、数据的输入和输出、处理数据的常用函数、新变量的创建、变量重编码和重命名、数据类型的转换、数据排序、数据集取子集、数据集合并,以及数据整合与重构等内容。数据的准备和管理是数据分析的基础。只有在对数据进行充分清洗和整理的基础上,才能进行有效的数据分析和挖掘,从而得出有意义的结论。因此,掌握好数据处理的技巧和方法,对于提高数据分析的效率和准确性至关重要。2.13小结2.13小结函数所属程序包作用主要用法factor()base将数据转换为因子factor(x=character(),levels,labels)matrix()base创建矩阵matrix(data,nrow,ncol,byrow,dimnames)data.frame()base创建数据框data.frame(...,s,check.rows,s,s,stringsAsFactors)data.table()data.table将数据框转换为数据表data.table(data)array()base创建数组array(data,dim,dimnames)list()base创建列表list(...)read.csv()utils导入CSV文件read.csv(file,header,sep,quote,dec,fill,comment.char,...)fread()data.table导入数据fread(file,header,sep,quote,dec,encoding)fwrite()data.table导出数据fwrite(data,file)order()base对数据进行排序order(...,na.last,decreasing,method)absbase求绝对值abs(x)sqrtbase求平方根sqrt(x)本章重要函数2.13小结函数所属程序包作用主要用法ceilingbase不小于x的最小整数ceiling(x)floorbase不大于x的最大整数floor(x)truncbase向0的方向截取x中的整数部分trunc(x)roundbase将x舍入为指定位的小数round(x,digits)signifbase将x舍入为指定的有效数字位数signif(x,digits)sin/cos/tanbase正弦/余弦/正切sin(x)/cos(x)/tan(x)logbase以x取以n为底的底数log(x,base)expbase求指数exp(x)meanbase求平均值mean(x)medianstats求中位数median(x)sdstats求标准差sd(x)varstats求方差var(x)quantilestats求分位数quantile(x,probs)rangebase求值域range(x)本章重要函数2.13小结函数所属程序包作用主要用法sdstats求标准差sd(x)varstats求方差var(x)quantilestats求分位数quantile(x,probs)rangebase求值域range(x)sumbase求和sum(x)minbase求最小值min(x)maxbase求最大值max(x)scalebase以数据对象按列进行中心化或标准化scale(x,center,scale)diffbase滞后差分diff(x,lag,differences)subbase正则表达式函数,用于替换sub(pattern,replacement,x,ignore.case,perl,fixed,useBytes)pastebase连接字符串paste(...,sep,collapse,recycle0)ncharbase统计字符串长度nchar(x,type,allowNA,keepNA)substringbase截取字符串substring(text,first,last)strsplitbase分隔符拆分字符串strsplit(x,split,fixed,perl,useBytes)本章重要函数2.13小结函数所属程序包作用主要用法lapplybase对向量、列表或数据框执行操作,并返回相同长度的列表对象lapply(X,FUN,...)withinbase计算数据环境中的表达式within(data,expr,...)namesbase重命名变量names(x)renamedplyr重命名列rename(.data,...)strutils查看数据类型str(object,...)typeofbase查看数据类型typeof(x)is.datatypebase数据类型的判断is.factor(x)/is.numeric(x)/is.character(x)as.datatypebase数据类型的转换as.factor(x)/as.numeric(x)/as.character(x)sortbase对单个数据对象按照升/降序排序sort(x,decreasing,na.last)rankbase将数据按升序排列rank(x,na.last,ties.method)orderbase对单/多个数据对象按照升/降序排序order(...,na.last,decreasing,method)completetidyr直接删除有缺失值的行complete(data,...,fill,explicit)rbindbase将多个数据集进行行合并rbind(data1,data2,…)cbindbase将多个数据集进行列合并cbind(data1,data2,…)本章重要函数2.13小结函数所属程序包作用主要用法rbindbase将多个数据集进行行合并rbind(data1,data2,…)cbindbase将多个数据集进行列合并cbind(data1,data2,…)mergebase将多个数据集按条件合并merge(x,y,by,by.x,by.y,all,all.x,all.y,sort,...)inner_joindplyr将两个数据集按相同的列名匹配交集inner_join(x,y,by,copy,suffix,...)full_joindplyr全连接,即保留两个数据框所有信息full_join(x,y,by,copy,suffix,...)left_joindplyr左连接,即保留第一个数据框所有信息left_join(x,y,by,copy,suffix,...)right_joindplyr右连接,即保留第一个数据框所有信息right_join(x,y,by,copy,suffix,...)tbase对矩阵或数据框进行转置t(x)aggregatestats将数据折叠aggregate(x,by,FUN)meltdata.table将数据融合,变成“长格式”melt(data,id.vars,measure.vars,,)dcastdata.table将“长格式”数据转化为“宽格式”dcast(data,formula,fun.aggregate,value.var)本章重要函数谢谢第3章控制流3.1条件执行3.4并行计算3.2循环3.5练习案例3.3减少显式循环3.6小结第3章控制流R语言是一种块结构程序语言,块(block)由大括号划分。当块只包含一条语句(statement)时,大括号可以省略。多条语句由换行符或者分号分隔,但建议尽量避免使用分号,每行一条语句更易于理解。一般情况下,R语言中的语句按顺序执行。但有时可能希望改变语句执行顺序,如仅在满足特定条件时执行某些语句,或者重复执行某些语句。R语言像C语言等其他编程语言一样,提供了丰富的控制流结构。本章首先介绍条件执行结构,然后介绍循环结构,最后介绍提高代码执行效率的编码技术,包括减少显式循环和并行计算。3.1条件执行3.1条件执行条件执行结构根据特定条件执行不同的分支语句,包括base程序包中的if-else结构、ifelse()和switch(),dplyr程序包中的if_else(),以及data.table程序包中的fifelse()和fcase()等。本节主要介绍base程序包的相关函数。3.1.1if-else结构if-else结构的语法为(演示)。若条件表达式cond为真,则执行true_action语句;若为假,则执行false_action语句。注意,在if-else结构中,cond需为一元逻辑向量,且不能为缺失值(NA),否则会报错(演示)。3.1条件执行3.1.2ifelse()ifelse()是if-else结构的向量化版本。它可以对向量中的每个元素分别进行条件判断,并返回相应的结果(演示)。cond是一个布尔值向量,true_val和false_val也都是向量。当true_val、false_val的长度小于cond的长度时,前者会通过循环补齐(recycle)。该函数返回一个向量。当cond[i]为真时,返回值的第i个元素为true_val[i];若为假,则返回值的第i个元素为false_val[i](演示)。当处理向量且控制流是二分支时,建议使用ifelse(),这有助于提高代码执行效率。3.1条件执行3.1.3switch()除了二分支问题,实际应用中还经常会遇到多分支问题。
switch()可以根据表达式的取值,从多个候选项中返回相应结果(演示)。当表达式为整数时,按位置匹配对应的结果;当表达式为字符串时,按名称匹配对应的结果。
若整数超出范围,或者字符串无法匹配,则返回空值。因此,switch()适用于实现多分支选择结构(演示)。3.2循环3.2循环3.2.1for循环for循环用于按照给定序列依次重复执行语句。for循环重复执行语句,直到循环变量var的值不再出现在序列seq中(演示)。for循环适用于需要按顺序遍历向量、下标或其他序列的情形。循环结构允许多次执行语句。R语言提供的循环结构包括for、while和repeat,循环控制语句包括break和next。3.2循环3.2.2while循环while循环在给定条件cond为真时,重复执行语句(演示)。while循环适用于循环次数不确定、需要根据条件动态判断是否继续执行的情形。使用while循环时,需要确保给定条件能够不为真,否则会导致永久循环3.2.3repeat循环repeat循环会一直执行语句,直到条件语句为真时才通过break语句退出循环。由于repeat循环每次先执行循环体语句,再判断是否满足退出条件,因此repeat循环至少会执行一次(演示)。它适用于需要先执行操作、再判断是否结束的情况。3.2循环3.2.4循环控制R语言的break语句用于在循环体中退出当前循环,并开始执行循环体后续的语句。在多层嵌套循环中,break语句用于停止执行所在层的循环,并开始执行外层循环。next语句则用于跳过当前循环,直接进入下一次循环,类似于其他编程语言中的continue语句(演示)。通过break和next,可以更灵活地控制循环执行过程。它们是循环结构中常用的控制语句。3.3减少显式循环3.3
减少显式循环3.3.1向量化运算向量化是指将函数作用于输入向量的每个元素,返回的结果也是一个向量。R语言中的基本运算符都是向量化的(演示)。R语言的许多内置函数都是向量化的,可以直接对输入向量的每个元素进行变换。例如,sqrt()、log()、sin()、round()等常用的数学函数。基于这些简单向量化函数构建的复杂函数也是向量化的(演示)。以上介绍的循环结构是R语言的显式循环,其具有易于理解和控制的优点。然而,R是解释性语言,相比于编译语言,在执行显式循环时运行效率较低。因此,为了提高R语言的执行效率,应尽量减少显式循环。R语言提供了多种方式来实现迭代循环,包括向量化(vectorize)运算和apply族函数。3.3
减少显式循环3.3.1向量化运算在实际的R语言编程运算时,应尽可能地使用这些内置函数,不要“重复造轮子”。因为这些内置函数调用了高度优化后的C或FORTRAN预编译代码,计算效率高,经过反复应用测试,能够保证计算的正确性。R语言的设计初衷是为了统计计算,其基础计算单元是向量和矩阵。针对它们的一些统计量计算也可以通过内置函数完成,而无须使用循环。sum()、prod()、mean()和sd()可以分别计算向量的和、积、均值和标准差;colSums()和rowSums()可以分别计算矩阵的列和与行和,而colMeans()和rowMeans()可以分别计算矩阵的列均值和行均值(演示)。R语言中,尤其是处理大型数据集时,应尽量减少显式循环。显式循环的速度比向量化函数的速度慢一个数量级以上,而且代码也较为冗长。因此,充分利用R语言的内置向量化函数,不仅可以简化代码,还能提高执行效率。3.3
减少显式循环3.3.2apply族函数另一种代替显式循环的方式是使用apply族函数。apply族函数有多个,包括apply()、lapply()、sapply()、vapply()、tapply()等。这里主要介绍常用的前3个函数:apply()、lapply()和sapply()。apply()可以对矩阵或多维数组的某些维度元素应用函数(演示)。在处理大型数据集的行和列时,应优先使用colSums()、rowSums()、colMeans()和rowMeans()等内置函数(演示)。lapply()返回的列表可以转换为向量或者矩阵。这时,可以选择lapply()的一种方便使用的封装函数sapply(),可以理解为simplifiedapply(演示)。3.3
减少显式循环3.3.2apply族函数apply族函数属于泛函数(functionals)。泛函数是一类将其他函数作为参数输入的函数,它们很好地展示了R语言的函数式编程(functionalprogramming)思想。相比于apply族函数,R语言中的函数式编程工具包purrr提供了更多的一致性、规范性和便利性。map()与lapply()功能类似,都是对向量的每个元素应用函数,并返回列表。purrr程序包也提供了简便的函数,可以返回所需的数据类型3.3
减少显式循环3.3.3
dplyr程序包的向量化函数dplyr程序包提供了高度优化的向量化函数。dplyr程序包中的case_when()可以向量化多重if-else结构(data.table程序包也提供了具有类似功能的fcase()),常用于数据重编码。case_when()语法类似switch()的语法,输入一系列由“~”连接的公式,左边是逻辑表达式,确定满足此条件分支的值,右边是相应的替换值。最后的.default相当于else分支,指定当左边的逻辑表达式都不匹配时的默认返回值(演示)。dplyr程序包中的mutate()可以对数据框中已有的变量进行函数变换,创建新的变量并将其放在最后面。这些变换函数必须是向量化的,作用于变量的每一行观测值。Vectorize()可以将标量函数向量化(演示)。这些函数虽然不一定都能显著提高运行速度,但能够避免显式循环,更符合R语言的向量化和函数式编程思想。同时,它们也更符合现代数据分析中简洁、规范的数据处理方式。3.4并行运算3.4
并行运算R语言支持并行计算(parallel
computing)来提高代码的执行效率和性能。并行计算将任务分割成多个子任务,分别交给独立的计算资源(如同一台计算机的多个核心,或一个集群中不同计算机的多个核心)同时进行处理,最后将结果收集合并,从而加快整体的计算速度。parallel程序包由早期的并行处理包multicore和snow合并而来。它们对应了R语言中进行并行化的两种主要方式:进程复刻(fork)和套接字(socket)通信。multicore功能是复刻当前的R进程,在新的核心上创建R子进程,这种并行化方式仅适用于支持进程复刻的类UNIX系统(如macOS,Linux等),不适用于Windows系统。snow功能是在每个核心上创建一个R进程,然后通过socket网络连接通信,该并行化方式适用于包括Windows的所有系统。3.4
并行运算并行运算可以显著节省时间,mclapply()并行执行的速度约为lapply()串行执行速度的3.5倍,略低于两者计算所用核心数之比(4倍)。对于运行时间较长的计算任务,可以使用pbmcapply程序包中的pbmclapply(),以进度条的形式追踪和可视化mclapply()并行计算的进度(演示)。Sockets通信并行化使用起来更复杂且速度稍慢,其一般使用过程如下(演示):(1)使用makeCluster()创建包含多个核心的集群;(2)由于集群中的每个核心都会创建独立的R进程,因此主R进程中加载的程序包、定义的变量和函数都不会自动继承,需通过clusterExport()导出给所有的R进程;(3)使用parLapply()、parSapply()等函数,将计算任务分发给集群中的不同核心并行计算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐专业职业方向规划
- 心血管疾病及危险因素管理患者教育
- (正式版)T∕CIQA 127-2025 陆路进口煤炭采信检验规程
- 2026新疆第十师北屯市总工会社会招聘工会社会工作者4人考试备考试题及答案解析
- 金属屋面系统安装专项施工方案
- 2026年大连理工大学外国语学院自聘综合办公室职员招聘笔试备考试题及答案解析
- 2026年及未来5年市场数据中国铜包铝行业市场全景监测及投资前景展望报告
- 2026江西省江投海油新能源有限公司招聘4人笔试模拟试题及答案解析
- 酒吧消防制度
- 2026江苏苏州工业园区司法工作办公室辅助人员招聘4人笔试模拟试题及答案解析
- (正式版)T∕GDSTD 024-2026 广东省自然资源资产收储整备指南
- 眉山市2026国家开放大学行政管理类-期末考试提分复习题(含答案)
- 嘉峪关2025年嘉峪关市事业单位引进50名高层次和急需紧缺人才(含教育系统)笔试历年参考题库附带答案详解(5卷)
- 2026江苏省数据集团有限公司春季招聘笔试参考题库及答案解析
- 2025年初级注册安全工程师笔试真题答案解析
- 2026IPA对外汉语笔试考前押题命中率90%附答案
- 2025年湖北省荆门市检察院书记员考试题(附答案)
- 2026年农用地重金属污染溯源与整治技术指南
- uom无人机考试题库及答案2025年
- 飞机结构与机械系统课件 座舱温度控制(2)2-77
- 子宫颈上皮内瘤变2级(CIN 2)管理中国专家共识管理规范总结2026
评论
0/150
提交评论