2013-12-20 102 views
0

我想將我自己的很多自定義函數轉換成可以使用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),那麼它不會加載zooreshape,等那個時候,而是加載zooreshape我第一次打電話,有一個require(zoo)require(reshape)線等

我想一個函數當我打電話給library(myOwnFunctions)時,需要加載依賴包。我的問題是,不是在每個我的自定義函數myFunc1myFunc2等使用require,如果我寫我的源代碼myOwnFunctions.R如下:


library(zoo) 
library(reshape) 
library(boot) 
... 
myFunc1<-function() { 
    ... 
} 
myFunc2<-function() { 
    ... 
} 
... 
myFuncN<-function() { 
    ... 
} 

,然後,如果我跑package.skeletonpackage.skeleton創建的所有文件/目錄當中(即在哪個文件夾中的哪個文件?)是否包含此包將對zoo,reshape,boot等具有依賴關係

感謝

回答

0

您可以通過編輯創建package.skeleton描述文件,特別是DependsImports領域。

相關問題