我想將我自己的很多自定義函數轉換成可以使用package.skeleton
重複使用的軟件包。我的功能取決於其他包(例如zoo
,reshape
,boot
等)。例如,假設我寫了我所有的自定義函數在一個名爲myOwnFunctions.R
文件,該文件類似於如下:R - regd軟件包依賴於另一個軟件包
myFunc1<-function() {
require(zoo)
...
}
myFunc2<-function() {
require(boot)
...
}
...
myFuncN<-function() {
require(reshape)
...
}
其中每個功能已與require()
功能的行,如果它使用了另一個庫。我使用下面的代碼(createPackage
)將該文件轉換爲我自己的包,這是我從其他人在StackOverflow上發佈的3-4篇文章中採用的(這實際上與我的問題無關,但爲了以防萬一)。
createPackage<-function (rCodeFile) {
source(rCodeFile)
# name the package as the same name as rCodeFile, but remove the path
pkgName<-strsplit(rCodeFile,"/")[[1]]
pkgName<-strsplit(pkgName[length(pkgName)],"\\.")[[1]][1]
# remove existing directory of files that package.skeleton creates
pkgDir<-paste(getwd(),pkgName,sep="/")
if (file.exists(pkgDir)) unlink(pkgDir,recursive=TRUE)
# create a skeleton directory for package
package.skeleton(name=pkgName)
# remove the data directory
unlink(paste(pkgDir,"data",sep="/"),recursive=TRUE)
# remove files in man directory, except the ones with the name as package
for (i in list.files(paste(pkgDir,"man",sep="/"))) {
if (length(grep("package",i))==0) unlink(paste(pkgDir,"man",i,sep="/"))
}
# build the package
system(paste("rcmd","build",pkgName,sep=" "))
# install the package
system(paste("rcmd INSTALL -l",paste0("\"",.libPaths()[1],"\""),pkgName,sep=" "))
}
因此,它工作正常,但有一個問題。如果我打電話library(myOwnFunctions)
,那麼它不會加載zoo
,reshape
,等那個時候,而是加載zoo
,reshape
我第一次打電話,有一個require(zoo)
或require(reshape)
線等
我想一個函數當我打電話給library(myOwnFunctions)
時,需要加載依賴包。我的問題是,不是在每個我的自定義函數myFunc1
,myFunc2
等使用require
,如果我寫我的源代碼myOwnFunctions.R
如下:
library(zoo)
library(reshape)
library(boot)
...
myFunc1<-function() {
...
}
myFunc2<-function() {
...
}
...
myFuncN<-function() {
...
}
,然後,如果我跑package.skeleton
在package.skeleton
創建的所有文件/目錄當中(即在哪個文件夾中的哪個文件?)是否包含此包將對zoo
,reshape
,boot
等具有依賴關係
感謝