前言

0.1 为什么

0.1.1 在不确定的自然中寻找规律

当我们选择生态学,我们便选择拥抱一个充满动态、关联与不确定性的复杂世界。我们研究的对象——从一只蝴蝶的迁飞路径,到整个森林群落的演替进程——本质上都不是确定性的。我们无法像物理学家在理想真空中预测小球落地那样,精准断言明年这片湿地中将有多少只丹顶鹤诞生。这种不确定性并非生态学的缺陷,恰恰是其魅力与挑战的核心。而概率与统计,正是我们理解、量化和驾驭这种不确定性的最强有力的语言和工具。可以说,一位现代生态学专业人才若不能流利使用这种语言,便如同一位探险家没有地图与指南针,难以在数据的海洋与自然的混沌中寻得可靠的规律。

首先,概率论为我们提供了描述和预测“不确定性”的语法。 生态学系统是由无数随机事件交织构成的:一次授粉是否成功?一只幼崽能否躲过天敌?一场火灾何时发生?概率让我们能够衡量这些事件的可能性。当我们谈论一个物种的灭绝风险、一种疾病在种群中的传播速率,或是气候变化下物种分布范围的变迁时,我们口中的“风险”、“速率”和“趋势”,其内核都是概率。例如,在保护生物学中,我们使用种群生存力分析(PVA)来预测一个濒危种群未来的命运,这本质上就是一个复杂的概率模型,它综合考虑了出生率、死亡率、环境波动等随机因素。没有概率论,我们对未来的预测将只能是模糊的猜测,而非基于数据的科学评估。

进而,描述统计赋予了我们将纷繁复杂的自然数据转化为清晰洞见的能力。 野外调查归来,我们面对的可能是在数十个样方中记录的成千上万条关于物种、高度、密度、土壤参数的数据。这些原始数据本身如同一堆未经雕琢的玉石,价值隐藏于混乱之中。描述统计就是我们的雕刻刀:通过计算平均值,我们了解了群落的平均高度;通过标准差,我们知晓了树木胸径的变异程度;通过绘制直方图,我们直观地看到了种群年龄结构的分布模式——是健康的金字塔形还是衰退的倒金字塔形?箱线图可以瞬间比较出不同生境下鸟类体型的差异。这些工具帮助我们简化、组织和可视化数据,让我们能够“看见”数据背后的故事,从而提出更精准的科学问题。

最终,推断统计完成了从“所见”到“所知”的惊险一跃,这是现代生态学研究的基石。 生态学的根本困境在于,我们几乎永远无法普查整个种群或生态系统(总体)。我们所能做的,是在时间、经费和人力的限制下进行抽样调查——设置样方、布设红外相机、进行航线调查。那么,一个核心问题随之而来:我们如何能确信从这有限的样本中得出的结论,能够代表我们真正关心的总体?统计推断给出了答案。置信区间告诉我们,基于样本数据,我们对总体参数(如整个森林的生物量)的估计有多大的把握范围。假设检验则提供了一套严谨的“反证法”逻辑,帮助我们判断观察到的模式(如施肥区与对照区产量差异)究竟是真实的效应,还是仅仅由抽样偶然性造成的“假象”。当我们说“施肥显著提高了草地生产力”(p < 0.05)时,我们正是在运用统计语言,以极大的信心宣布这一发现并非偶然。这使得我们的工作从对特定样本的描述,上升到了对普遍规律的推论,赋予了生态学相关成果以普适性和说服力。

总而言之,概率与统计并非强加于生态学之上的数学枷锁,而是根植于生态学研究对象本质的内在需求。它们是我们将观察数据转化为可靠结论所不可或缺的桥梁。从准确评估一个生态系统的健康状况,到可信地预测环境变化的影响,每一步都深深依赖于概率与统计的思维框架。掌握这门语言,意味着你们将获得一种强大的能力:在一片看似混沌的自然现象中,清晰地聆听出规律的低语,并基于数据做出科学的判断和决策。 这不仅是一门必修课,更是你们未来职业生涯中,无论是在科研、保护、管理还是咨询领域,最忠实的伙伴和最可靠的向导。

0.1.2 AI时代的机遇与陷阱

生态学,这门诞生于野外观察与手绘记录的学科,正经历着一场由数据驱动的深刻革命。当我们研究的尺度从单个样方扩展到整个星球,当我们的数据从几十个手写记录点激增至TB级别的卫星遥感影像、声学监测数据和基因组序列时,传统的数据处理与分析方法已显得力不从心。毫无疑问,现代计算工具——从强大的统计软件(如R、Python)到高性能计算集群——已经成为生态从业者不可或缺的”数字望远镜”和”计算实验室”。它们让我们能够驾驭海量数据,构建复杂的模型,从而解析自然界中前所未有的复杂模式。然而,这场变革的最新篇章——人工智能(AI),特别是机器学习技术的融入,在将我们的分析能力推向新高度的同时,也正将生态学相关工作和研究引入一个机遇与风险并存的全新领域。

首先,我们必须承认,现代化分析工具,尤其是AI,正以前所未有的方式赋能生态学相关工作。 它们极大地提升了我们处理“大数据”的效率和深度。传统统计方法往往在应对高维度、非线性关系时捉襟见肘,而机器学习算法却能如鱼得水。例如,利用深度学习模型,我们可以自动识别数以百万计的红外相机照片中的物种,将研究人员从漫长枯燥的人工判读中解放出来;通过分析数十年的卫星图像,AI能精准刻画森林砍伐、城市扩张的动态,其速度和精度远超人工目视解译。更重要的是,AI具有强大的”模式发现”能力,它能在纷繁复杂的环境变量与物种分布数据中,挖掘出人类可能忽略的微妙关联,甚至为决策提供新的依据。这仿佛为我们提供了一种”超级直觉”,使得预测物种对气候变化的响应、解析生态系统韧性的临界点等复杂问题成为了可能。AI工具正变得越来越”平民化”,用户友好的界面和自动化流程降低了技术门槛,让更多生态从业者能够专注于实际问题本身,而非复杂的编程实现。

然而,这把锋利的“双刃剑”的另一面,是潜藏的巨大风险,其核心在于“黑箱”效应与因果关系的混淆。 许多最强大的机器学习模型(如深度神经网络)就像一个黑箱:我们输入数据,它给出精准的预测,但其内部的决策过程往往难以解释。对于生态从业者而言,知道”某种鸟类更可能出现在哪里”固然重要,但理解”为什么”——即其背后的生态学机制(是温度、食物来源还是栖息地结构?)——才是深入理解问题的关键。AI模型可能精准地预测了物种分布,但其建立的相关关系可能只是数据中的虚假模式,甚至可能指向一个荒谬的因果关系(例如,根据数据,它可能”发现”电价上涨是导致蛙类减少的主要原因,只因二者在时间序列上巧合地相关)。这种对相关性的过度依赖,而缺乏因果推断,可能导致我们得出错误的结论,甚至制定出无效或有害的决策和政策。

此外,AI模型的性能高度依赖于训练数据的质量与代表性,这带来了“垃圾进,垃圾出”的经典困境。 生态学数据往往存在样本偏差(例如,交通便利的地区观测记录多,偏远地区记录少)、系统误差和噪声。如果一个AI模型是用有偏差的数据训练出来的,那么它只会强化并放大这种偏差。例如,一个用于识别全球鸟类分布的模型,如果主要用北美和欧洲的数据训练,它在预测南美热带雨林物种时可能会表现极端偏差。这不仅会导致分析错误,更会加剧数据应用的不平等,使得数据匮乏地区的生态问题被进一步忽视。更严峻的风险在于,从业者可能因为过度依赖AI输出的”权威”结果,而丧失了对数据本身的批判性审视和实地经验的直觉,最终导致生态学这门扎根于自然的学科,与其实践本体渐行渐远。

因此,在AI时代,生态专业人才的角色非但没有被削弱,反而变得更加关键。 我们绝不能沦为算法的仆从,而必须成为其智慧的驾驭者。未来的生态专业人才需要具备更全面的素养:一方面,要拥抱技术,学会与AI工具协同工作;另一方面,必须坚守科学精神,对模型结果保持深刻的怀疑和批判。我们需要不断追问:这个模型的假设是什么?训练数据是否有代表性?结果是否有实际意义?能否被独立的观察和实践所验证?

归根结底,现代化分析工具和AI是生态专业人才手中的超级”望远镜”,它让我们看得更远、更清,但望远镜本身并不能告诉我们星空的奥秘。真正的价值,依然依赖于望远镜背后那颗充满好奇心、严谨逻辑和深厚生态学知识的大脑。在这场方兴未艾的技术革命中,我们必须善用工具之力,同时时刻警惕其陷阱,确保技术最终服务于我们更深切地理解、保护和可持续利用这个脆弱星球的终极使命。

0.2 本书介绍

基于前文对生态学数据分析和AI时代挑战的深入探讨,本书旨在为生态学专业人才提供一套完整、实用的生态统计思维和数据分析能力培养体系。在数据驱动决策日益重要的今天,掌握生态统计方法不仅是科研工作的基础,更是生态保护、环境管理、政策制定等各个领域从业者的核心素养。

本书以R语言为主要工具,系统介绍生态学研究中常用的统计方法,特别强调统计思维在实际问题中的应用。我们相信,真正的数据分析能力不仅在于掌握技术工具,更在于培养对数据的批判性思维和对结果的科学解读能力。

0.2.1 本书特色与教学理念

问题导向的教学方法是我们贯穿全书的核心原则。我们坚信,脱离实际场景的统计理论学习如同在真空中练习游泳,难以培养真正的应用能力。因此,每一章都从真实的生态学问题出发——无论是研究气候变化对物种分布的影响,还是评估保护措施对生物多样性的效果,抑或是分析污染物在食物链中的传递规律。通过这些鲜活的问题情境,读者能够深刻理解统计方法在解决实际问题中的价值,而不仅仅是记住公式和算法。这种问题导向的学习方式,能够帮助读者建立起统计思维与生态学直觉之间的桥梁,让抽象的数学概念在具体的生态情境中找到落脚点。

实践性强的学习体验是本书的另一重要特色。我们选择R语言作为主要工具,不仅因为它在生态学界的广泛应用,更因为它强大的可重复性和灵活性。书中提供了大量可直接运行的代码示例,这些代码都基于真实的生态数据案例。从最简单的数据导入和清洗,到复杂的模型构建和结果可视化,每一步都有详细的代码说明和解释。我们特别注重代码的可读性和可复现性,确保读者不仅能够运行代码,更能理解代码背后的逻辑。更重要的是,我们鼓励读者在理解示例的基础上进行修改和扩展,将所学方法应用到自己的研究问题中,真正实现从”知道”到”会用”的转变。

统计思维的深度培养是本书区别于传统统计教材的关键所在。我们不仅教授”如何做”,更着重解释”为什么这样做”以及”这样做的局限性是什么”。在每一章中,我们都设置了专门的思维训练环节,引导读者思考:这个方法的假设条件是什么?如果假设不满足会有什么后果?结果的生态学意义是什么?如何避免对结果的过度解读?通过这些训练,读者将逐步建立起批判性思维的习惯,学会质疑、验证和反思,而不仅仅是接受统计输出的表面结果。这种思维能力的培养,在AI时代显得尤为重要,它能够帮助读者在复杂的数据环境中保持清醒的判断力。

循序渐进的学习路径设计确保了学习过程的科学性和有效性。本书从最基础的统计编程概念开始,逐步深入到概率分布、描述统计、参数估计等核心内容,然后进入假设检验、相关分析、回归建模等中级方法,最后拓展到模型选择、高级回归和机器学习等前沿领域。这种递进式的结构设计,既考虑了知识的逻辑顺序,也照顾了学习者的认知规律。每一章都建立在前一章的基础上,同时又为后续章节做好铺垫,形成了一个完整的知识体系。读者可以按照章节顺序系统学习,也可以根据自己的基础和需求选择性地阅读相关章节。

时代特色的融入使本书具有更强的现实意义和前瞻性。我们特别关注AI时代给生态数据分析带来的新挑战和新机遇,在相关章节中探讨了传统统计方法与机器学习技术的结合点,分析了”黑箱”模型的解释性问题,讨论了大数据环境下的抽样偏差和因果推断困境。这些内容不仅帮助读者理解当前技术发展的前沿动态,更重要的是培养他们在技术快速变革的环境中保持批判性思维和科学判断的能力。我们相信,未来的生态专业人才不仅需要掌握数据分析的技术工具,更需要具备在复杂信息环境中辨别真伪、评估风险、做出明智决策的综合素养。

0.3 课程在线资源

本书是专门为华东师范大学生态学专业本科和硕士研究生设计的生态统计学课程教材。在长期的教学实践中,我们发现传统的分散式教学材料往往难以满足学生系统学习的需求。因此,我们将课程中最为核心和重要的内容进行了系统性的整理和总结,形成了这本完整的教程。

对于选修这门课程的同学而言,这本教材的一个重要价值在于:你无需在课堂上忙于记录老师讲解的具体内容,因为所有的核心知识点、方法原理和代码示例都已经在这本书中得到了详尽的呈现。课堂时间的宝贵之处在于聆听老师的讲解逻辑——为什么某种统计方法适用于特定的数据类型?这种方法的内在优势是什么?它存在哪些潜在的局限性?这些深层次的思考过程和方法论层面的理解,才是课堂学习的真正精髓。

我们希望同学们能够将注意力集中在理解统计思维的形成过程、掌握数据分析的逻辑框架,以及培养对统计结果的批判性解读能力上。具体的课程资源,包括完整的网页版教材、可下载的PDF版本以及所有的源代码,都可以通过以下链接获取:

请同学们根据个人学习习惯选择合适的版本,充分利用这些资源进行课前预习和课后复习。

特别声明: 为提升教材内容质量与教学效率,本书在编写过程中采用大语言模型作为辅助工具,用于准备教学素材与案例。我们始终秉持一个明确宗旨:本书的核心价值不在于创造前所未有的统计方法描述或提出全新理论,而在于以更清晰、更有效的方式,帮助学生理解已有的生态统计知识体系。为此,我们充分借助大语言模型在整合与表达领域知识方面的优势,积极借鉴和融合该领域中那些被广泛认可的经典方法与成熟阐述,力求“站在巨人的肩膀上”,编撰出一本真正贴合学生学习需求、实用且易懂的教材。同时,全书内容均系编写者在人工智能辅助下独立完成,除合理使用大语言模型所生成的内容外,不存在任何形式的抄袭行为。

0.4 学习方式

0.4.1 持续学习R语言的重要性

在现代生态统计学学习中,R语言已经成为不可或缺的核心工具。本书中大量的统计练习、数据分析和可视化任务都需要通过R语言来实现。因此,坚持不断地学习和使用R语言是掌握生态统计方法的关键前提。正如古人所言:“思R不学则殆,学R不思则罔”(图0.1)。如果只思考统计理论而不学习R语言的具体实现,就会在实践中陷入困境;如果只机械地学习R语言代码而不思考其背后的统计原理,就会在理解上产生迷茫。

思R不学则殆,学R不思则罔

图0.1: 思R不学则殆,学R不思则罔

R语言的学习是一个渐进的过程,需要持续不断的实践和积累。我们建议同学们将R语言的学习融入到日常的统计学习中,而不是将其视为一个独立的技术任务。每学习一个新的统计方法,都要尝试用R语言来实现它;每遇到一个数据分析问题,都要思考如何用R语言来解决它。通过这种理论与实践的紧密结合,你不仅能够掌握统计方法,更能培养出解决实际问题的能力。

0.4.2 在错误中快速成长

学习生态统计学的过程中,犯错是不可避免的,甚至是必要的。只有在你不断的练习中犯了很多错误,你才能很快地进步。就像哈利波特学习魔法一样,总会有爆炸的小错误(图0.2)。如果没有任何错误的反馈,你就无法很快速地成长。R语言的学习尤其如此——语法错误、函数使用不当、数据类型混淆,这些都是初学者必然会遇到的挑战。

我们鼓励同学们以积极的心态面对这些错误。每一次错误都是一次宝贵的学习机会:

  • 语法错误教会你R语言的精确性要求
  • 函数使用错误让你更深入地理解函数的参数和返回值
  • 逻辑错误帮助你建立更严谨的编程思维
  • 结果解读错误培养你对统计输出的批判性思考
像哈利波特学习魔法一样从错误中快速成长

图0.2: 像哈利波特学习魔法一样从错误中快速成长

重要的是,不要因为害怕犯错而不敢尝试。相反,你应该主动地创造犯错的机会——大胆地修改示例代码,尝试不同的分析方法,探索R语言的各种可能性。每一次成功的调试,每一次对错误的理解,都是你能力提升的重要标志。

0.4.3 实践导向的学习策略

本书的学习方式强调实践导向。我们建议同学们采用”做中学”的方法:

  1. 先理解统计原理:阅读每一章的理论部分,理解统计方法的基本思想和适用条件
  2. 再运行示例代码:在R环境中运行书中的代码示例,观察结果,理解代码的逻辑
  3. 然后修改和扩展:在理解示例的基础上,尝试修改参数、使用不同的数据、探索新的可视化方式
  4. 最后应用到自己的问题:将所学方法应用到自己的研究数据或感兴趣的问题中

通过这样的学习循环,你不仅能够掌握统计技术,更能培养出独立解决实际问题的能力。记住,统计学习的最终目标不是记住公式和代码,而是培养出能够应对各种数据分析挑战的思维方式和实践能力。

0.4.4 正确的上课姿势

由于本课程以实践为主导,强调动手操作和代码练习,因此正确的上课姿势与传统理论课程有着本质区别。正确的上课方式不是将双手放在口袋里或放在桌面下用脑袋听讲,而是将双手放在键盘上,随时准备敲代码

当老师在课堂上讲解完一个统计方法或数据分析技巧后,一旦提到”练习”或”动手操作”,你就应该立即将注意力转移到键盘上,开始运行代码、修改参数、观察结果。只有通过这种”手脑并用”的学习方式,才能真正将理论知识转化为实践能力。

生态统计学的学习不是被动接受知识的过程,而是主动构建技能的过程。每一次键盘敲击,每一次代码运行,都是你能力提升的重要一步。只有将课堂时间充分利用起来,边听边练,边思考边操作,你才有可能快速掌握这门课程的核心内容,培养出真正的数据分析能力。

0.5 重复本书例子

由于本书包含大量基于R语言的代码练习,为了确保你能够顺利运行所有示例并获得预期的结果,强烈建议你在上课前或开始阅读本书之前,完成所有所需R包的安装工作

需要特别注意的是,不同版本的R语言和依赖包可能会导致计算结果出现差异。为了确保你能够完全重复本书中的所有例子并获得一致的结果,请确保你使用的R版本号和所有依赖包版本号与本书保持一致。这样可以最大程度地避免因版本差异导致的兼容性问题,保证代码的可复现性。

本书使用以下R包:

pkgs <- c(
  # 数据整理与可视化
  "tidyverse",      # 数据科学工作流核心包(dplyr, tidyr, ggplot2等)
  "ggplot2",        # 优雅的图形语法系统
  "patchwork",      # 图形组合与布局
  "gridExtra",      # 网格图形排列
  "reshape2",       # 数据重塑与转换
  "showtext",       # 中文字体支持

  # 文档生成与报告
  "bookdown",       # 书籍文档生成
  "knitr",          # 动态报告生成
  "rmarkdown",      # R Markdown文档
  "DiagrammeR",     # 流程图与图表

  # 生态学与生物多样性分析
  "vegan",          # 群落生态学与多样性分析
  "bipartite",      # 二分网络分析
  "picante",        # 系统发育与群落分析
  "spaa",           # 物种关联分析
  "NetIndices",     # 网络指标计算
  "EcoSimR",        # 生态零模型分析

  # 系统发育与进化分析
  "ape",            # 系统发育与进化分析
  "phytools",       # 系统发育工具
  "geiger",         # 比较系统发育分析

  # 空间分析与地理统计
  "spdep",          # 空间依赖性分析
  "gstat",          # 地理统计与克里金插值
  "geoR",           # 地理数据分析
  "automap",        # 自动克里金插值
  "spatialreg",     # 空间回归模型
  "spTimer",        # 时空数据分析
  "adespatial",     # 空间生态学分析

  # 统计分布与拟合
  "sn",             # 偏正态分布
  "moments",        # 矩计算与分布检验
  "fitdistrplus",   # 分布拟合

  # 假设检验与统计推断
  "coin",           # 条件推断检验
  "pwr",            # 功效分析
  "BayesFactor",    # 贝叶斯因子分析

  # 回归与线性模型
  "lme4",           # 混合效应模型
  "lmerTest",       # 混合模型检验
  "car",            # 回归诊断与检验
  "AER",            # 应用计量经济学
  "performance",    # 模型性能评估

  # 高级回归与模型选择
  "brms",           # 贝叶斯回归模型
  "MuMIn",          # 多模型推断
  "BMS",            # 贝叶斯模型平均
  "monomvn",        # 多元正态建模
  "relaimpo",       # 相对重要性分析

  # 机器学习
  "caret",          # 分类与回归训练
  "rpart.plot",     # 决策树可视化
  "pdp",            # 部分依赖图
  "torch",          # 深度学习框架

  # 时间序列分析
  "tseries",        # 时间序列分析
  "forecast",       # 时间序列预测

  # 相关性与信息论
  "ppcor",          # 偏相关与半偏相关
  "energy",         # 基于能量的统计检验
  "infotheo",       # 信息论分析
  "corrplot",       # 相关性可视化

  # 结构方程模型
  "lavaan",         # 结构方程建模
  "semPlot",        # 结构方程模型可视化

  # 生态模型与种群分析
  "marked",         # 标记重捕模型
  "Distance",       # 距离抽样分析

  # 广义可加模型
  "gratia",         # GAM模型诊断与可视化

  # 模型诊断与验证
  "DHARMa",         # 广义线性模型残差诊断

  # 数据与动画
  "gapminder",      # 全球发展数据
  "gganimate",      # 图形动画
  "audio"           # 音频处理
)

install.packages(unique(pkgs))

devtools::install_github("GotelliLab/EcoSimR") #群落零模型

#openmx在Ubuntu上安装依赖较多,最好通过已编译好的包安装
#ubuntu sudo apt install r-cran-openmx 

本教程所用的R软件环境:

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.3.3 (2024-02-29)
##  os       Ubuntu 24.04.1 LTS
##  system   x86_64, linux-gnu
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       Etc/UTC
##  date     2025-12-11
##  pandoc   3.1.3 @ /usr/bin/ (via rmarkdown)
##  quarto   NA
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package     * version date (UTC) lib source
##  bookdown      0.44    2025-08-21 [1] CRAN (R 4.3.3)
##  bslib         0.9.0   2025-01-30 [1] CRAN (R 4.3.3)
##  cachem        1.1.0   2024-05-16 [1] CRAN (R 4.3.3)
##  cli           3.6.5   2025-04-23 [1] CRAN (R 4.3.3)
##  codetools     0.2-19  2023-02-01 [4] CRAN (R 4.2.2)
##  devtools      2.4.5   2022-10-11 [1] CRAN (R 4.3.3)
##  digest        0.6.37  2024-08-19 [1] CRAN (R 4.3.3)
##  ellipsis      0.3.2   2021-04-29 [1] CRAN (R 4.3.3)
##  evaluate      1.0.5   2025-08-27 [1] CRAN (R 4.3.3)
##  fastmap       1.2.0   2024-05-15 [1] CRAN (R 4.3.3)
##  fs            1.6.5   2024-10-30 [1] CRAN (R 4.3.3)
##  glue          1.8.0   2024-09-30 [1] CRAN (R 4.3.3)
##  htmltools     0.5.8.1 2024-04-04 [1] CRAN (R 4.3.3)
##  htmlwidgets   1.6.4   2023-12-06 [1] CRAN (R 4.3.3)
##  httpuv        1.6.15  2024-03-26 [1] CRAN (R 4.3.3)
##  jquerylib     0.1.4   2021-04-26 [1] CRAN (R 4.3.3)
##  jsonlite      2.0.0   2025-03-27 [1] CRAN (R 4.3.3)
##  knitr         1.49    2024-11-08 [1] CRAN (R 4.3.3)
##  later         1.4.1   2024-11-27 [1] CRAN (R 4.3.3)
##  lifecycle     1.0.4   2023-11-07 [1] CRAN (R 4.3.3)
##  magrittr      2.0.3   2022-03-30 [1] CRAN (R 4.3.3)
##  memoise       2.0.1   2021-11-26 [1] CRAN (R 4.3.3)
##  mime          0.12    2021-09-28 [1] CRAN (R 4.3.3)
##  miniUI        0.1.1.1 2018-05-18 [1] CRAN (R 4.3.3)
##  pkgbuild      1.4.6   2025-01-16 [1] CRAN (R 4.3.3)
##  pkgload       1.4.0   2024-06-28 [1] CRAN (R 4.3.3)
##  profvis       0.4.0   2024-09-20 [1] CRAN (R 4.3.3)
##  promises      1.3.2   2024-11-28 [1] CRAN (R 4.3.3)
##  purrr         1.1.0   2025-07-10 [1] CRAN (R 4.3.3)
##  R6            2.6.1   2025-02-15 [1] CRAN (R 4.3.3)
##  Rcpp          1.1.0   2025-07-02 [1] CRAN (R 4.3.3)
##  remotes       2.5.0   2024-03-17 [1] CRAN (R 4.3.3)
##  rlang         1.1.6   2025-04-11 [1] CRAN (R 4.3.3)
##  rmarkdown     2.29    2024-11-04 [1] CRAN (R 4.3.3)
##  sass          0.4.9   2024-03-15 [1] CRAN (R 4.3.3)
##  sessioninfo   1.2.3   2025-02-05 [1] CRAN (R 4.3.3)
##  shiny         1.10.0  2024-12-14 [1] CRAN (R 4.3.3)
##  urlchecker    1.0.1   2021-11-30 [1] CRAN (R 4.3.3)
##  usethis       3.1.0   2024-11-26 [1] CRAN (R 4.3.3)
##  vctrs         0.6.5   2023-12-01 [1] CRAN (R 4.3.3)
##  xfun          0.53    2025-08-19 [1] CRAN (R 4.3.3)
##  xtable        1.8-4   2019-04-21 [1] CRAN (R 4.3.3)
##  yaml          2.3.10  2024-07-26 [1] CRAN (R 4.3.3)
## 
##  [1] /home/gcshen/R/x86_64-pc-linux-gnu-library/4.3
##  [2] /usr/local/lib/R/site-library
##  [3] /usr/lib/R/site-library
##  [4] /usr/lib/R/library
## 
## ──────────────────────────────────────────────────────────────────────────────