2013-12-20 7 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), который я принял из 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 и т. д.

Благодаря

ответ

0

Вы можете отредактировать файл ОПИСАНИЕ созданный package.skeleton, особенно Depends и Imports полей.

Смежные вопросы