1

最も近い R リポジトリを検出する方法はありますか? これは、適度に近いだけで完璧である必要はありません。

私がやっていることについてもっと良い方法があるかもしれないので、全体像について議論します。を使用するパッケージを作成していますavailable.packages()

パッケージをチェックすると、次のようなエラーが表示されます。

Error in contrib.url(getOption("repos"), type):
  trying to use CRAN without setting a mirror.
Calls: p_cran -> available.packages -> contrib.url
Execution is halted

私の考えは、次のようなものを使用してミラーを一時的に設定することです。

x <- getOption("repos")
#SOME HOW TEST IF x IS NOT SET BUT NOT SURE HOW
if (is.not.set(x)){
    y <- get.local.mirror.function()
    options(repos=structure(c(CRAN=y)))
    on.exit(options(repos=structure(c(CRAN=x))))
}

したがって、このルートが合理的である場合、克服すべき2つの問題があると思います。

  1. reposが設定されているかどうかを確認する
  2. リポジトリとして配置する最も近い、またはいくつかのデフォルトを見つけます

これを理解するのを手伝ってくれてありがとう。

4

1 に答える 1

2

この問題の厄介な部分は、R リポジトリの場所を取得していないことです。主要なものがどこにあるかを記録する定数を保持するのは非常に簡単です。注意が必要な部分は、ユーザー自身の場所を見つけることです

私がお勧めするのは、タイムゾーンの設定を調べることです。直接読み取っSys.timezone()てルックアップ テーブルに適用することもできますが、それは文字列なので面倒かもしれません。代わりに、たとえば、UTCオフセットを見つけようとします

tmp = as.POSIXlt(Sys.time())
offset =  as.numeric(as.POSIXct(format(tmp))) 
         - as.numeric(as.POSIXct(format(tmp, tz = "UTC")))

次に、ある種のテーブルに対してオフセットを検索し、各バンドを何らかのリポジトリに一致させることができます。リポジトリがダウンしている場合などを考慮してください...

公平を期すために、ランダムなリポジトリを選択するだけで、かなり妥当な結果が得られる可能性があります。(たぶん、どこにもいないもののいくつかを除外しています...)

options("repos")リポジトリが設定されているかどうかを判断するには、またはを調べるだけgetOption("repos")です。から?options:

‘repos’: URLs of the repositories for use by ‘update.packages’.
      Defaults to ‘c(CRAN="@CRAN@")’, a value that causes some
      utilities to prompt for a CRAN mirror. 

だから(getOption("repos")[1] == "@CRAN@")うまくいくはずです。

于 2012-05-25T09:09:16.507 に答える