R - regd包取决于另一个包

时间:2013-12-20 21:52:46

标签: r

我正在尝试将我经常使用的一些自定义函数转换为可以使用package.skeleton重复使用的包。我的功能取决于其他包(例如zooreshapeboot等。例如,假设我在名为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),那么它当时不会加载zooreshape等,而是第一次加载zooreshape调用具有require(zoo)require(reshape)行等的函数

我想在调用library(myOwnFunctions)时加载依赖包。我的问题是,如果我按如下方式编写源代码require,而不是在我的每个自定义函数myFunc1myFunc2等中使用myOwnFunctions.R


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

然后如果我运行package.skeletonpackage.skeleton创建的所有文件/目录中的哪个(即哪个文件?在哪个文件夹中?),它会合并该包将依赖{ {1}},zooreshape等。

由于

1 个答案:

答案 0 :(得分:0)

您可以修改package.skeleton创建的描述文件,尤其是DependsImports字段。