Я пытаюсь преобразовать несколько моих собственных пользовательских функций, которые я использую много в пакете, который я могу использовать повторно, используя package.skeleton
. Мои функции зависят от других пакетов (например, zoo
, reshape
, boot
и т. Д.). Например, предположим, что я написал все мои пользовательские функции в файле с именем myOwnFunctions.R
напоминающего следующим образом:R - пакет regd зависит от другого пакета
myFunc1<-function() {
require(zoo)
...
}
myFunc2<-function() {
require(boot)
...
}
...
myFuncN<-function() {
require(reshape)
...
}
где каждая функция имеет линию с функцией require()
если она использует другую библиотеку. Я преобразовал файл в свой собственный пакет, используя следующий код ниже (createPackage
), который я принял из 3-4 других сообщений в StackOverflow (это на самом деле НЕ относится к моему вопросу, но я предоставляю его на всякий случай).
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
, включает ли он, что этот пакет будет иметь зависимость от zoo
, reshape
, boot
и т. д.
Благодаря