Rパッケージを作成しました。つまり、mypackage.tar.gzファイルがあります。このパッケージは、他のいくつかのパッケージに依存しており、すべてCRANミラーからダウンロードおよびインストールできます。
ここで、依存関係がまだインストールされていないシステムにこのパッケージをインストールします。パッケージをインストールすると、依存関係が自動的にダウンロードおよびインストールされます。
私は試した:
install.packages("mypackage.tar.gz",type="source",dependencies=TRUE,repos="http://a.cran.mirror")
しかし、ミラー上でmypackage.tar.gz
を検索し(そして明らかに見つかりません)、repos=NULL
を設定すると、ローカルパッケージファイル(文書化されているとおり)を正しくインストールしようとしますが、明らかに見つかりません依存関係パッケージ。
だから私の質問は、「混合」インストール(オンライン依存関係のあるローカルパッケージ)を実行する方法がありますか、または唯一の方法はすべての依存関係を手動でインストールすることですか?
Devtoolsパッケージのinstall
を使用できます。 install("<directory of your package>", dependencies = TRUE)
を実行するだけです。そのヘルプの状態:
R CMD INSTALLを使用してパッケージをインストールします。また、パッケージの依存関係がまだインストールされていない場合、CRANからインストールしようとします。
ローカルパッケージを既にインストールしている場合は、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
_へのシステムコールを介して処理されるため、依存関係に関連する引数はありません。
ここでは、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を使用できるはずですが、そうしようとするとエラーが発生します。
私は個人的に、どの依存関係が欠落しているかを伝える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つの_‘
_は異なり、このスクリプトを初めてコピーするときは、元の引用符文字を再度コピーすることをお勧めします。