Instalação offline do pacote R e dependencies

Suponha que eu precise instalar vários pacotes em uma máquina (Linux) que não tenha uma conexão com a Internet. Digamos que eu baixei uma cópia do cran e queimei em um DVD que levo para o local off-line:

wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz 

Eu posso até adicionar um arquivo PACKAGES que contém uma visão geral de todos os pacotes de origem e suas dependencies:

 library(tools) write_PACKAGES() 

Como eu poderia usar isso offline para instalar um pacote de origem de tal forma que as dependencies também sejam resolvidas e instaladas a partir dos arquivos locais? Por exemplo, alguém deseja instalar o pacote ggplot2, que possui uma estrutura de dependência bastante profunda. Suponha que o pacote fonte do ggplot2 e todas as suas dependencies estejam disponíveis como pacotes fonte no diretório de trabalho atual. Se eu fizer:

 install.packages("ggplot2_0.9.1.tar.gz", repos=NULL) 

Isso resulta em um erro, porque as dependencies não são resolvidas de todo. Alternativamente:

 install.packages(list.files(pattern="*.tar.gz"), repos=NULL) 

No entanto, isso também ignora a estrutura de dependência e tenta instalar pacotes em ordem alfabética, o que também falhará.

Eu olhei para available.packages e contrib.url mas eu simplesmente não consigo encontrar um exemplo de instalação de um pacote de origem a partir de um arquivo local, incluindo suas dependencies.

A resposta correta foi dada por Joshua Ulrich no comentário sobre a questão:

A chave é prefixar o argumento para repos ou contriburl com file:// . Então, nos sistemas Unixy, pode-se fazer:

 install.packages("ggplot2", contriburl="file:///path/to/packages/") 

Isso pressupõe que todos os pacotes de origem necessários, bem como um arquivo de índice PACKAGES, estão disponíveis em /path/to/packages . Se nenhum arquivo PACKAGES estiver presente, isso deve ser gerado primeiro usando:

 library(tools) write_PACKAGES("/path/to/packages/") 

que irá gerar um índice de todos os pacotes fonte encontrados neste diretório. Observe que no exemplo, há três barras por trás do prefixo file: A terceira barra indica um caminho relativo à raiz do sistema de arquivos.

A diferença entre o argumento repos e contriburl é que os repos irão append outro /src/contrib ao caminho especificado, já que geralmente é onde os pacotes fonte estão localizados em um espelho oficial do repository CRAN.

Com referência à Resposta acima, se a instalação estiver no Windows, write_PACKAGES () gerará dois arquivos: PACKAGES e PACKAGES.gz no diretório ‘/ path / to / packages /’ onde todos os arquivos zip serão colocados. O arquivo PACKAGES.gz deve ser excluído antes que a function install.packages () esteja corretamente habilitada para ler o arquivo PACOTES solitário, caso contrário, o erro ‘não é possível abrir o arquivo compactado’ será exibido.

Eu tive os mesmos problemas durante a instalação off-line. De alguma forma, não funcionou por linha de comando.

Eu baixei, extraí todas as dependencies (mantendo a versão min requerida) e colei as pastas na pasta da biblioteca. Desta forma, apenas o meu problema foi resolvido.