我正在尝试将我经常使用的一些自定义函数转换为可以使用package.skeleton
重复使用的包。我的功能取决于其他包(例如zoo
,reshape
,boot
等。例如,假设我在名为myOwnFunctions.R
的文件中编写了所有自定义函数,类似于:
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)
时加载依赖包。我的问题是,如果我按如下方式编写源代码require
,而不是在我的每个自定义函数myFunc1
,myFunc2
等中使用myOwnFunctions.R
:
library(zoo)
library(reshape)
library(boot)
...
myFunc1<-function() {
...
}
myFunc2<-function() {
...
}
...
myFuncN<-function() {
...
}
然后如果我运行package.skeleton
,package.skeleton
创建的所有文件/目录中的哪个(即哪个文件?在哪个文件夹中?),它会合并该包将依赖{ {1}},zoo
,reshape
等。
由于
答案 0 :(得分:0)
您可以修改package.skeleton
创建的描述文件,尤其是Depends
和Imports
字段。