>?Sys.which('make')
??????????????????????????????make?
"C:\\rtools40\\usr\\bin\\make.exe"?
返回上述信息,才能證明 Rtools 配置已完成。需要強調的是:不能修改安裝路徑!且 C 盤文檔下的?.Renviron 不能刪除!除此之外,還需要:設置 R 的 path 環境變量,這一步已經在?《R語言環境配置》一文講過,因此,實在沒有重復的必要性。并且,這篇文章也不是針對零基礎而講的。僅僅只會涉及到重點內容以及各種易錯點。只有環境變量設置成功,后續才能調用 R CMD 進行一系列的操作。至此環境配置已完成,當然,還需要準備:RStudiolibrary(devtools)
create_package()
或者選擇 create_package() 直接創建一個包所需要的基本內容。至于 create_package() 如何使用:RTFM基本的路徑設置,絕對路徑,相對文件,文件管理,如何保存到合適的位置,以及 R 語言包的建立,不能直接輸入任何中文字符,這些都屬于基礎入門內容。不是現如今應該重復敘述的內容。從這篇文章開始,今后不會再涉及針對基礎入門的幫助性文章。需要說明的是:
1/??devtools 包必須使用,導入 devtools 的同時,會默認加載 usethis包
2/??而 roxygen2 則被 RStudio 的操作環境下使用了,并沒有被顯式調用。
3/? 這三個包,構成了 R 包創建的整個工具支持。
整個項目文件夾下包括了:
? ? ?---R
? ? ?---man
?? ? ---NAMESPACE
? ? ?---DESCRIPTION
以及?Rproj?和?LICENSE?
這些部分是包的創建所必須的,但 Data 和 vignette文件夾并不是默認需要的,這一點需要引起重視。
創建之前,需要把工作路徑設置到創建包的路徑下!
一般,第一步通常是修改:DESRITION 文件
Package:?
Title:?
Version:?
Date:?
Authors@R:?
????person(given?=?,
???????????family?=?,
???????????role?=?c("aut",?"cre"),
???????????email?=?)
Author:?[aut,cre]
Depends:?R?(>=?4.0.0)
Description:?
License:?
Imports:?
Encoding:?UTF-8
LazyData:?true
Roxygen:?list(markdown?=?TRUE)
RoxygenNote:?7.1.1
相關的內容,需要個人補齊。這一塊,不再強調。
Imports 內容,涉及到編寫函數時使用到的其他包。必須在 Imports 項中指出,否則建立包時,會產生報錯信息。
這一塊,倒沒有過多需要強調的內容。
在編寫函數之前,需要確保當前環境下,所有的變量被清空:
rm(list?=?ls())
所有的代碼均位于 R 文件夾下,通過一個個 .R 為后綴名的腳本來記錄。但目前,仍然無法支持 R 文件夾下涉及子目錄,也就意味著,所有的函數都必須通過處于同一級的 R ?的腳本來保存。在編寫函數之前,需要明確:R 包函數分為兩大類:1/? ?支持導出的函數2/? ?僅在包內使用的內部函數創建文件及刪除文件:edit_file('./R/read.R')
file.remove('R/read.R')
當然設置路徑是包的主路徑,而 R 是子目錄,所以創建 R 腳本是必須添加上子目錄名稱,而不需要時,則通過 file.remove()?刪除路徑。
需要說明的是:file.remove() 操作的文件,將直接被清理,不會進入回收站中,因此需要謹慎對待。
R 文件夾下的腳本名并不一定等于函數名。一個腳本下可以存在多個函數均被導出。
對于導出的函數,需要添加注釋內容。而 R 包的內部函數,則不需要注釋內容。
所有的注釋內容,以?#' 開頭,或者可以選擇:##’ 開頭。
簡單的示例:
#'?@title?
#'?@description?
#'?@param?
#'?@examples
#'?@export
#'?@author
scan.str??function(string){
??return(scan(text?=?string))
}
@ 后面的每一項內容都需要補齊,但?@author, @examples 并不是必須項。
其中,title, description, param, export 則是基礎內容,需要完善,而 param 則是針對函數中參數內容的注釋。
@return?? 用于解釋函數的返回內容
@importFrom?則是至關重要的內容
例如:
#'?@importFrom??utils?read.table
read.txt?function(text,header?=??T,...)?{
??return(read.table(text?=?text,?header?=?header,...))
}
函數中使用到了除 base 包以外的函數,均需要通過?@importFrom 進行指明!
格式為:@importFrom pkgname funtion1 function2 function3 ...
編寫完成,保存后,下面進行自動生成相關信息的操作:
>?rm(list?=?ls())
>?document()
Updating?...?documentation
Loading?...
Writing?NAMESPACE
Writing?NAMESPACE
document() 用于生成相關的內容:完善 NAMESPACE 文件以及 man 文件夾下的 rd 文件,但在此之前,必須保證當前環境不與所創建的包中的函數相沖突。所以建議習慣性執行:rm() 操作。
---end---