web-dev-qa-db-ja.com

CRANミラーからの依存関係を持つローカルRパッケージをインストールします

Rパッケージを作成しました。つまり、mypackage.tar.gzファイルがあります。このパッケージは、他のいくつかのパッケージに依存しており、すべてCRANミラーからダウンロードおよびインストールできます。

ここで、依存関係がまだインストールされていないシステムにこのパッケージをインストールします。パッケージをインストールすると、依存関係が自動的にダウンロードおよびインストールされます。

私は試した:

install.packages("mypackage.tar.gz",type="source",dependencies=TRUE,repos="http://a.cran.mirror")

しかし、ミラー上でmypackage.tar.gzを検索し(そして明らかに見つかりません)、repos=NULLを設定すると、ローカルパッケージファイル(文書化されているとおり)を正しくインストールしようとしますが、明らかに見つかりません依存関係パッケージ。

だから私の質問は、「混合」インストール(オンライン依存関係のあるローカルパッケージ)を実行する方法がありますか、または唯一の方法はすべての依存関係を手動でインストールすることですか?

44
WoDoSc

Devtoolsパッケージのinstallを使用できます。 install("<directory of your package>", dependencies = TRUE)を実行するだけです。そのヘルプの状態:

R CMD INSTALLを使用してパッケージをインストールします。また、パッケージの依存関係がまだインストールされていない場合、CRANからインストールしようとします。

8
Emiel

ローカルパッケージを既にインストールしている場合は、toolsのいくつかの関数を使用して、CRANから依存関係をインストールできるはずです。

_library('tools')
installFoundDepends(pkgDepends('mypackage', local = FALSE)$Found)
_

注:引数(reposなど)をinstallFoundDependsを介して_install.packages_に渡すことができます。

Depends出力のpkgDepends要素を使用して、_install.packages_に直接渡すこともできます。

_install.packages(pkgDepends('mypackage')$Depends)
_

更新:どうやら_dependencies=FALSE_でローカルパッケージをインストールすることはできません。これは奇妙なようです。リポジトリからリモートパッケージに対してそれを行うことができるからです。理由( ソースコードを見る )は、if(is.null(repos) & missing(contriburl))、インストールが_R CMD INSTALL_へのシステムコールを介して処理されるため、依存関係に関連する引数はありません。

5
Thomas

ここでは、untar()devtools::install()とともに使用し、ソースtarballが抽出されたディレクトリを渡します。

_d <- tempdir()
untar("mypackage.tar.gz", compressed="gzip", exdir=d)
devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                  repos="https://cloud.r-project.org/")
_

複数のリポジトリからインストールする場合は、それらのリストを提供できます。たとえば、 Bioconductor とCRANの両方を使用するには、次を実行できます。

_ devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                   repos=BiocInstaller::biocinstallRepos())
_

注:tarballをinstall()に直接渡す方法がわかりませんが、このソリューションは一時的に機能し、一時ディレクトリに抽出するため、混乱がありません。 install_local()はtarballを使用できるはずですが、そうしようとするとエラーが発生します。

4
Megatron

私は個人的に、どの依存関係が欠落しているかを伝えるRStudioを使用しています。次に、次の小さなスクリプトの引数にある文字列をコピーして、古典的な「奇妙な」記号を変更します(xclipはクリップボードにコピーします[macOSのpbcopyに似ています])。

_#!/bin/bash
echo $@ | sed 's/‘/"/g' | sed 's/’/"/g' | xclip -selection clipboard
_

その後、単にinstall.packages(c(ctrl_v__what_to_install))を使用すると、Rがすべての依存関係のインストールを開始します。

注:上記のスクリプトで書かれた2つの__は異なり、このスクリプトを初めてコピーするときは、元の引用符文字を再度コピーすることをお勧めします。

0
Garini