我已经编写了一些R函数,并使用RStudio将它们拖放到脚本文件中。这些是我反复使用的代码片段,所以我想知道如何才能最轻松地用它们创建R包(供我自己私人使用)。
我已经在线阅读了各种“如何”指南,但它们非常复杂。有人可以建议这样做的“白痴指南”吗?
到目前为止,我已经创建了很多R软件包,因此我可以为您提供帮助。在继续执行后续步骤之前,需要满足一些先决条件,其中包括:
create_package
和use_r
之类的函数)如果没有上述软件包,则可以分别使用以下命令安装它们:
install.packages("devtools")
install.packages("roxygen2")
步骤:
((1)使用library(devtools)
在RStudio中导入devtools。
((devtools是一个核心软件包,使用其工具可以更轻松地创建R软件包)
((2)使用以下方法创建软件包:
create_package("~/directory/package_name")
用于自定义目录。
或
[create_package("package_name")
,如果要在当前工作空间目录中创建包。
((3)执行此功能后不久,它将打开一个新的RStudio会话。您会发现在旧的会话中会自动生成一些行,这基本上告诉R在指定目录中创建具有必需组件的新包。
之后,我们就完成了RStudio的这个旧实例。我们将在新的RStudio会话窗口上继续工作。
到目前为止,包创建部分已经结束了(是的,很简单),但是,包不能仅通过其创建就可以直接运行,而事实上,您需要在其中包含一个函数,这需要包的一些其他方面,例如作为其文档(使用@param
,@return
等提及函数的标题,参数,返回类型,示例等-如果您在某些github仓库中看到了roxygen文档,就会很熟悉),然后单击R CMD
检查以获取工作正常。
我将在后续步骤中进行介绍,但是如果您要验证是否已创建包,可以查看:
新RStudio会话的右上角,您可以在其中看到您创建的包名称。
控制台,您将在其中看到R在我们在create_package()函数中指定的路径中创建了一个新的目录/文件夹。
RStudio会话的文件窗格,您会在目录中注意到一堆新文件和目录。
((4)正如您所说的那样,将函数拖放到脚本文件中-因此,您需要首先创建脚本,这可以使用以下方法完成:
use_r("function_name")
一个新的R脚本将在您的工作会话中弹出,随时可以使用。现在继续在其中编写您的函数。
((5)完成后,您需要加载为程序包编写的函数。这是通过使用devtools::load_all()
功能来完成的。
当您在控制台中执行load_all()
时,您将看到控制台中显示的Loading package_name
,您将知道这些功能已加载到您的程序包中。之后,您可以尝试在控制台中调用函数,以验证它们是否是程序包的一部分。
((6)现在,您的函数已被写入并加载到程序包中,现在该进行检查了。在更改程序包时,最好检查整个程序包。函数devtools::check()
提供了一种简便的方法。
尝试在控制台中执行check()
,它将通过许多过程来检查软件包中的警告/错误,并提供与屏幕上的消息相同的详细信息(与错误/警告/注释有关)。最后的“ R CMD检查”结果将包含重要的日志,供您查看出现的错误和警告及其频率。
如果您的程序包中的功能编写得很好,(并考虑了其他程序包的依赖性)它将在执行check
时给您两个警告:
第一个警告将与您的软件包使用的许可证有关,而新许可证未指定该许可证。
第二个应该是用于记录的内容,警告我们我们的代码没有记录。
要解决第一个问题,即许可证,请使用use_mit_license("license_holder_name")
命令(或其他适合您的软件包的许可证-但是如您所提到的供私人使用,只要您自己去,指定的内容并不重要(使用或不分发)使用您的名字代替“ license_holder_name”或任何适合许可证名称的名称。这将在.DESCRIPTION文件(在文件面板中)中添加许可证字段,并创建添加许可证信息的其他文件。
[此外,您还需要编辑.DESCRIPTION文件,该文件具有不言自明的字段以供填写或编辑。这是一个如何获得它的示例:
Package: Your_package_name
Title: Give a brief title
Version: 1.0.0.0
Authors@R:
person(given = "Your_first_name",
family = "Your_surname/family_name",
role = c("package_creator", "author"),
email = "[email protected]",
comment = c(ORCID = "YOUR-ORCID-ID"))
Description: Give a brief description considering your package functionality.
License: will be updated with whatever license you provide, the above step will take care of this line.
Encoding: UTF-8
LazyData: true
要解决文档警告,您需要使用roxygen文档来记录功能。一个例子:
#' @param a parameter one
#' @param b parameter two
#' @return sum of a and b
#' @export
#'
#' @examples
#' yourfunction(1,2)
yourfunction <- function(a,b)
{
sum <- a+b
return(sum)
}
[遵循roxygen语法并根据需要添加属性,如果从基本R以外的其他包中导入,则某些是可选的,例如@title
用于指定标题,而其他@import
等则是必需的。] >
使用Roxygen骨架完成对函数的文档记录后,我们可以通过运行devtools::document()
来告诉我们的软件包我们已经记录了函数。执行document()
命令后,再次执行check()
以查看是否收到任何警告。如果您不这样做,那意味着您很好。 (如果您按照以下步骤操作,则不会)
最后,您需要安装软件包,以使R可以访问它。只需使用install()
命令(是与开始时使用的命令相同,只是不需要在此处指定软件包之类的内容,例如install("package")
,因为您当前正在加载程序包并且可以部署/安装的实例中工作,并且在安装几行后,您会看到一条语句,例如“ Done(package_name)”,它表示我们的软件包的安装已完成。
现在,您可以尝试使用功能,方法是先使用library("package_name")
导入软件包,然后从软件包中调用所需的函数。就是这样,恭喜您做到了!
我试图以一种清晰的方式(我创建我的R包的方式)包括该过程,但是如果您有任何疑问,请随时询问。