【冰糖R语言】创建R包(打包R程序)

2024-02-18 03:30

本文主要是介绍【冰糖R语言】创建R包(打包R程序),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目标:将现有R程序打包

可能涉及知识点:devtools包、usethis包、Rstudio软件

一、R包的类型

通常一个R包中包含以下元素:

1)R文件夹:函数代码

2)man文件夹:存放每个函数的注释文件

3)DESCRIPTION文件:描述文件,描述该包的相关信息,包括名称、开发者等

4)NAMESPACE文件:命名空间文件,描述该包与其他包的依赖关系,比如用到了其他包的函数

5)LICENSE文件:许可证文件

通常,使用的R包通常分为Source Package和Binary Package两种:

Source Package:源代码包,可跨平台使用,安装时有编译步骤

Binary Package:二进制代码包,不同平台不通用,安装时无编译步骤

两者解压后的文件不同,比如R文件夹下的内容,Source Package的R文件夹包含源码R文件,Binary Package的R文件夹下是解析后的文件。两者安装后,函数功能不会有差异。

二、devtools包

devtools包是一款用于R包开发的工具。其功能包括创建、更新、安装、检查等。

详见官网:Tools to Make Developing R Packages Easier • devtools

常用函数:

devtools::load_all():模拟安装和加载R文件夹中的所有函数,默认路径为当前文件夹

devtools::document():更新man文件夹的注释,以及‘NAMESPACE’文件

devtools::check():在本地检查和构建包,输出可能存在问题

devtools::install_github():从github安装包

三、usethis包

usethis包是一个工作流包,用于自动化处理项目设置和开发过程中出现的重复任务(R包或者非R包项目),在创建R包时常与devtools一起使用。

详见官网:Automate Package and Project Setup • usethis

常用函数:

usethis::create_package():创建一个R包,生成R文件夹、DESCRIPTION文件等内容

usethis::use_mit_license():使用MIT的许可证,会更新DESCRIPTION文件中的许可证信息

四、Rstudio软件生成包

Rstudio可通过一系列操作完成devtools和usethis的工作,比如构建包时便调用了devtools::build()

步骤:

1、新建Rstudio项目-“R Package”,填写包名称、工程文件夹路径,此步骤会在指定目录下生成R包的相关要素,包括R文件夹、man文件夹、DESCRIPTION文件等,以及工程文件.Rproj等。

2、在DESCRIPTION文件中添加该包的相关信息,包括包名称、开发者等。

其中许可证License可使用usethis添加,比如usethis::use_mit_license()。依赖项Imports可使用usethis::use_package()添加,此处引用了e1071和pROC两个包。

3、在R文件夹中添加R脚本文件,其中放入定义的函数,这些函数可放在一个或者多个R文件中。默认生成该文件夹时会自带一个示例R文件,删去即可。

4、在每个定义的函数内插入注释,补充函数说明信息。具体地,将光标放在某个函数内,在Rstudio工具栏中“Code”-“Insert Roxygen Skeleton”,会在该函数前生成注释字段,需要手动输入方法名称、参数含义等内容。

下图给出一个定义的读取数据文件的函数的说明:

Title 处填写函数名称,之后可填写函数相关描述。

@param 字段后自动给出参数变量名,可在其后添加参数说明,此处一个参数fileName

@return 字段后添加函数返回内容说明

@export 字段使得该函数可被外部调用

@importFrom 字段后标明此函数中引用关系,比如此处使用了utils包中的read.csv函数

@example 字段后可添加一个该函数的使用示例,需定义有意义的变量,而不是文本说明

此段说明内容对应于使用help查看该函数的说明文档时获得的内容。

5、执行devtools::document()更新函数文档,会在man文件夹下为每个函数生成Rd文件,即为上一步为每个函数添加的函数说明。同时会更新NAMESPACE文件,函数注释中@export 字段和@importFrom 字段的内容都会出现在NAMESPACE文件中。

6、执行devtools::check()对包进行检查。会显示详细的errors、warnings、notes信息,可根据这些信息进行修改。

7、点击Rstudio工具栏“Build”-“Build Source Package”或“Build Binary Package”构建不同类型的R包,即在本地生成对应压缩包。

8、进一步地,可使用devtools::build_manual()生成参考手册。前提是系统中有pdflatex,可通过安装tex发行版本MiKTeX实现。安装MiKTeX后,重新打开R包工程,重新check。可能会提示“!pdfTeX error: pdflatex.EXE (file t1-zi4r-0): Font t1-zi4r-0 at 600 not found”,此时以管理员身份运行cmd,执行命令“initexmf –-mkmaps”重建映射,重新check正常(实际并没有单独安装该字体)。执行devtools::build_manual()即可。

这篇关于【冰糖R语言】创建R包(打包R程序)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719903

相关文章

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整