Rのプロキシ設定

実験データ解析に必要不可欠な存在であるR。
自作のコードでバリバリ解析するだけでなく。
多種多様な貢献パッケージの存在も、Rの大きな強みのひとつ。
わたしもよく、ネット上のリソースにお世話になっています。

そんなRは、用途上、大学にあるPCで使うことが多いわけですが。
大学や研究機関は、たいてい独自のネットワーク構築をしているので。
接続認証でひと苦労することも多いハズ。

Rにおいても、そのへんが問題になることがあります。
ブラウザでつなぐぶんには、ちゃんとネットにつながってるのに。
Rにパッケージを追加しようとすると、弾かれる…。
あるいはネット上のソースコードをsourceできない…。
そんなときは、プロキシサーバの設定がうまくいっていないのかも。

本ページでは、これらの問題を解決するため。
Rにおけるプロキシ設定の方法を解説します。
記事作成上、ネットワーク用語などに疎いかたを想定してるので。
冗長な説明が多いかとおもいますが。
必要に合わせ、適宜お読みとばしいただければとおもいます。

以前のバージョンをご存知のかたへ

このページは、2014年1月末にごっそりと書き直しました。
とくに、以前はWindows用の1種類の方法のみを載せていて。
それを(1)と(2)の2ステップにわけて解説していたのですが。
新バージョンでは2種類(+α)の方法を載せました。
(自分がWindowsを卒業したので。)

これにともない、以前解説していた方法は(1)とし。
そのなかで(1-1)・(1-2)という2段階で説明しています。
旧バージョンで(2)としていた
システムのプロキシを引き継ぐ指定をRのリンクに加える
という内容は、新バージョンの(1-2)にあたります。

本ページにリンクしていただいてるリンク元さんで
「このページの(2)の方法を...」
と書いてあったら、それは現在の(1-2)のことかもしれません。
申し訳ありませんが、その旨ご考慮ください。


プロキシとは

Rにおける設定方法のハナシのまえに。
そもそもプロキシってなんぞな?って説明をちょっとだけ。
そのへんはすでにご存知のかたは、とばしてください。

プロキシというのは、ざっくりいえば
企業や学校などで、内部ネットワークと外部のインターネットを接続する仕組み
のことです。

多くの大学では、まず学校全体で内部ネットワークを組んでおり。
内部から外部のインターネットへは、好き勝手にアクセスはできません。
そのときに両者をつないでくれる仕組みが、プロキシ。
プロキシを経由して、大学のネットワークから出入りするのです。
いってみればプロキシは、ネットワークの「玄関」みたいなもんですね。

Rを使ってネット上のファイルにアクセスする場合も、これは必要で。
CRANに接続する必要のある、パッケージのインスコも同様。
プロキシの存在するネットワークから、これらのことをしたければ。
Rにプロキシの設定を教えてやらねばならんのです。
そうでないと、Rがインターネットに到達できずにエラーになる。

たとえば新規にインストールしたプロキシ未設定のRにおいて。
本学のネットから[パッケージのインストール...]を試みても、
> utils:::menuInstallPkgs()
 --- このセッションで使うために、CRAN のミラーサイトを選んでください --- 
 警告:  リポジトリー http://essrc.hyogo-u.ac.jp/cran/bin/windows/contrib/3.0 に対する索引にアクセスできません  
 警告:  リポジトリー http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/3.0 に対する索引にアクセスできません  
 以下にエラー install.packages(NULL, .libPaths()[1L], dependencies = NA, type = type) : 
   如何なるパッケージも指定されませんでした 
 追加情報:  警告メッセージ: 
In open.connection(con, "r") :
   'cran.r-project.org' をポート 80 でコネクトできません 
などといわれて、エラーになってしまいます。

最後の行に書かれている
'cran.r-project.org' をポート 80 でコネクトできません
というのは、
「そもそもRがネット上のリソースにアクセスできてないですよ」
という意味です。

そりゃまあ、プロキシは大学ネットの「玄関」なので。
その設定をせずにインターネットに接続するなんて、
扉の位置を知らないのに家に出入りしようとする
ようなもん。
エラーで当然なのです。

ということで、以下ではまずRのプロキシ設定方法を説明し。
Rが正しく玄関から外部のネットにアクセスできるようにしてやる。
そのあとで、ちょっと余談的な内容として。
わたしがつまづいた部分をまとめようとおもいます。

あ、それから。
Rでパッケージインストールに失敗する別の原因として、
アカウントに管理者権限がなくて、パッケージディレクトリをつくれない
というものもあります。
こちらが原因のエラーは、上記とは別のメッセージになりますし。
当然、以下のプロキシ設定などをしても、エラーは解消しません。

また、これも当たり前ですが。
プロキシを利用していない環境なら、以下のような設定は不要で。
そのままRからネット上のソースにアクセスできますからね。
念のため。。。

ちなみに、用語の補足。
「プロキシ proxy」は片仮名で「プロクシ」と表記することもあり。
そこからさらに「串(くし)」と書いたりもします。
また本稿では、OSや個々のソフトに対して
プロキシの情報を教えて正常なネット接続を可能にすること
を「プロキシ設定をする」と表現していますが。
これをして「プロキシをあてる/通す」「串を刺す」ともいいます。
全部おなじ意味なので、難しく考えなくて大丈夫です。


Rのネット接続の確認

さて、検索などでこのページにたどり着いたとすれば、おそらくは
「Rでパッケージがインストールできない!」
といった問題を抱えてのことでしょう。
そこで、まずはそれが本当にネット接続の問題なのか試してみます。

Rを起動して、下記のコードをコピペで実行してください。
source("http://noucobi.com/Rsource/tameshi.txt")
これはウチのサイト上においてある1行スクリプトで。
ちゃんと接続して実行できれば、R上に
Congratulations!
You've successfully accessed to this message through the internet.
という文字が表示されます。

もしこのメッセージが表示されたのであれば、それは
Rがちゃんとネット経由でソースにアクセスできている
ということを意味します。
なので、問題はプロキシ設定以外のところなのかもしれません。

逆に、Rがうまくネットにつながれていない場合。
しばらくはRが「応答なし」の状態になり。
(ネットからのリプライを待っている状態です。)
一定時間経過すると、
 以下にエラー file(filename, "r", encoding = encoding) : 
   コネクションを開くことができません 
 追加情報:  警告メッセージ: 
In file(filename, "r", encoding = encoding) :
   'noucobi.com' をポート 80 でコネクトできません 
というようなエラーが返ります。
(途中で中断したければ、Ctrl+Cで抜けてください。)

このエラーは、さきにあげた例と同様のもので、
Rがネットにアクセスできていない
ということを意味します。
もしブラウジングとかはできるのに、Rだけでこうなる場合。
プロキシ設定が必要とされている可能性があります。

以下、Rにプロキシ設定をする方法を説明していきますが。
つながったかどうかは、この方法でご確認ください。

# この方法はhttpプロトコルでの接続を試しています。
# よってこれにパスしても、ftp側は設定されていない可能性があり。
# ftp接続ができなければ、パッケージのインストールなどでは失敗します。
# その場合は、ftpプロキシの設定を確認してください。
# プロトコル云々については以下で説明していますので。
# わからなければ気にしないでください。


プロキシ設定作業の方針

Rにプロキシ設定をしてやる方法は、いくつかあります。
おもだった方法としては、おそらく以下の2種類で。
わたしも端末とその用途ごとに、ふたつの方法を使い分けています。

1つめの方法は、PCのシステム設定におけるプロキシを踏襲する
つまり、Rが乗ってるOS自体の設定を参照し。
そのプロキシ設定の値を借りてきて、Rにもネットに接続してもらいます。

この方法は、Windows版Rを使っている場合限定です。
また、OSのプロキシ設定がされていることが前提となります。
とはいえ、研究室においてあるPCなら、たいていそれは済んでいるので。
Rにもだまってそれを踏襲してもらっちゃえばよい、と。

2つめの方法は、Sys.setenv関数でR上から設定する
この方法、かつてはこのページで「できない」って解説してましたが。
申し訳ありません、ちゃんとできます
現にわたしのラボPCは、現在こちらの方法でつないでます。

この方法は、Rの関数をつかってプロキシ設定をするわけですから。
愚直にやると、毎回のR起動時に設定をし直さねばならなくて。
とてもじゃないけどやってらんない。
なので、R起動時に自動で実行される.Rprofileを利用し。
それと組み合わせて使うことになります。

こちらのよいところは、外部ファイルで設定をしているところ。
このファイル自体は、ただのテキストで自由にコピーできるので。
それを複製するだけで、別のPCでも同じ設定を使えます。
また、OSの設定とは独立に、R用のプロキシ設定をするだけなので。
システム設定ではプロキシを設定したくない
とか、
端末のシステム設定をする権限がない
とかいう場合にも、こちらの方法が選択肢となります。

それでは以下、それぞれの方法を順に解説します。
以下の(1)(2)のうち、自分の用途にあったほうを選び。
説明にしたがって設定を行なってください。
また末尾には(3)として、さらに別の方法も記載します。


(1) PCのシステム設定におけるプロキシを踏襲する

先に書いたとおり、この方法はWindows版R限定です。
Windows以外の環境では使えませんのでご注意ください。

本項では以下の2ステップでRにプロキシを設定します。
(1-1) Windowsのシステム設定でプロキシを通す。
(1-2) RにWindowsのプロキシ設定を踏襲する指定をする。
すでにOSのプロキシ設定が終わっている場合、(1-2)へ進んでください。

(1-1) Windowsのプロキシ設定方法

Windowsのデフォルトのウェブブラウザは、IE。
インターネットエクスプローラです。
そのためWindowsのプロキシ設定はIEが保持しており。
これをシステムのプロキシ設定として使用しています。
MS Updateなどのシステム関連の接続も、この設定を踏襲します。

このIEのプロキシ設定をするには、
[スタート]→[コントロールパネル]
を開き、
[ネットワークとインターネット]→[インターネットオプション]
と進んでインターネットオプション画面を開きます。


[コントロールパネル]→[ネットワークとインターネット]


[ネットワークとインターネット]→[インターネットオプション]


[インターネットのプロパティ]ウィンドウ

Windowsのバージョンによって、項目の名前は少し違うかもしれません。
(XPでは[ネットワークとインターネット接続]だった。)
コントロールパネルが古い表示になってる(カテゴリ化されてない)場合。
アイコン一覧のなかに直で[インターネットオプション]があります。
MEや2000では、コントロールパネル自体がマイコン内にあるかも。

またこれは、前述のとおりIEの設定画面なので。
IEのメニューバーから
[ツール]→[インターネットオプション]
などとすることでも開くことができます。


IE経由での設定画面表示

続いて[インターネットのプロパティ]ウィンドウ上部から
[接続]タブ
を開き、さらに下部の
[LANの設定]ボタン
を押して設定画面を開いてください。


[接続]タブ


[ローカルエリアネットワーク(LAN)の設定]ウィンドウ

上記のようなウィンドウが開いたでしょうか。
プロキシは、このウィンドウ下部の
[プロキシサーバー]
の欄をつかって設定します。
[LANにプロキシサーバーを使用する]
にチェックをつけ、アドレスとポートを入力します。

プロキシサーバのアドレス・ポートは、機関によって当然違います。
これはご自身の所属のものを入力してください。
わからなければ、同僚に聞くとか。
あるいはネットワーク管理部局に問い合わせるのが早いでしょう。
大学であれば、
「学内ネットの接続方法」
みたいなウェブページに掲載されていることも多いです。

ちなみにこのウィンドウの上部は、プロキシの自動検出設定です。
Windowsにはプロキシを自動検出する機能があり、運が良ければ、
[設定を自動的に検出する]
にチェックをいれておくだけでつながります。
ですがケースバイケースなので、いまいち頼れません。
よほどMicrosoft愛があるのでなければ、使わないほうが懸命です。

また機関によって、ネットワーク上で専用スクリプトを提供しており。
Windowsに、その設定用スクリプトのありかさえ教えておけば。
ユーザ自身が細かい設定を知る必要はない、ってこともあります。
その場合は、
[自動構成スクリプトを使用する]
にチェックを入れ、アドレスを入力してください。
ただし、これは提供されたスクリプトの質や環境にもよりますが。
自動構成スクリプトでは、接続確立に時間がかかる場合がありまして。
本学にもありますが、トロかったのでわたしは使ってません。

続いて、プロトコルごとの設定について。
ネットワーク接続には、http・ftpなど多種のプロトコルがありますが。
プロキシにも、それぞれ「http用」「ftp用」といった種類があります。
簡単のため、どのプロトコルも同じプロキシな機関も多いですが。
たとえばわたしの所属のように、
「ftpプロキシだけサーバアドレスが違うよ」
といったネットワーク構成の場合もあります。

いまの設定だと、全プロトコルが同じプロキシ設定を使います。
よって、プロトコルごとに個別のプロキシサーバを指定する場合、
[詳細設定]ボタン
をクリックして[プロキシの設定]ウィンドウを開き、
[すべてのプロトコルに同じプロキシサーバーを使用する]
のチェックを外して、それぞれのアドレスを入力してください。


プロトコルごとのプロキシ設定

機関から特に指定がなければ、全プロトコル共通だとおもわれます。
よくわからなければそのままにしといてよいでしょう。
また、Rが使うのはhttp接続とftp接続だけなので。
この2つさえちゃんと設定できれば問題ありません。

これで、Windowsに対するプロキシ設定はできたはずです。
ウィンドウは[OK]で閉じてください。
そのうえで、ネット接続ができるようになっているかを確認します。
サードパーティのブラウザは、自前のプロキシ設定を持っていうるので。
確実なのは、IEでネット接続できるか確かめることでしょう。
「IEの設定=Windowsの接続設定」だからですね。

てことで、いったん我慢して嫌々IEを開いてください。
ちゃんと外部のサイトがみれたら、プロキシ設定は成功です。
ブラウザによっては、ソフト起動直後にGoogleの画面が出ますが。
この画面は、ソフト内に保持されたローカルページな場合があるので。
「Googleって出たからネットつながってる」
と早とちりすると、実はつながっていない場合があります。
適当な文字で検索し、検索結果が表示されれば確実です。


Googleを表示しているようにみえるが…(Firefoxの例)


実際に検索してみると…


プロキシが通ってなくてつながらない

ちなみに画像はWin 7 Pro(64bit版)のものを使いましたが。
これ以前のバージョンなら、おおよそ同様に作業可能だとおもいます。
残念ながらWin 8は、GUIが一新されたので。
具体的にどういう手順になるのか、わたしにはわかりません。
コントロールパネルが開ければ、以降は同様だとおもいますが…。

(1-1') システムのプロキシ設定変更に関する注意

さて、これでWindowsのプロキシ設定が終わりましたが。
ここでちょっと注意点。

このプロキシ設定は、大学から外部へ接続するには必須なのですが。
たとえばこのコンピュータがラップトップ機だった場合。
このPCを自宅にもって帰って使う、なんてことがありますよね?

しかし自宅のネット回線には、いま設定したプロキシサーバはありません。
大学のネットワーク上に設置されてるサーバですからね。
するとどうなるか。
大学以外の場所でこのPCをネットにつなごうとしても、
指定された(その回線には)ありもしないプロキシに接続試行する
ことになり、結果として接続エラーになります。

よって、自宅や他の公衆LANなどに接続する機会がある場合。
その都度、上記の手順で[LANの設定ウィンドウ]を開き、
[LANにプロキシサーバーを使用する]
のチェックをon/offしてください。

これ、いってみれば当然のことなんですが。
標準ブラウザをIE以外にしている場合、忘れがちです。

というのも、ネットにつなぐ機会の大部分はブラウジングなので。
ウェブブラウザがちゃんとつながれば文句はない。
そして多くのブラウザは、自前の固有プロキシ設定をもっていて。
ソフト自身でプロキシの使用/不使用を切り替えられるんですよね。
わざわざWindows全体のプロキシ設定を変える必要がない。

わたしが最初にプロキシをいじり始めたころは、ここにつまづきました。
というのも、当時わたしはラップトップPCを使っていて。
ウェブブラウザにはFirefoxを使用していました。
なので、帰宅したらFirefoxでプロキシをoffにしていたんですね。

一方、Rのパッケージインスコなんかは、ラボでやることが多いので。
Windowsのプロキシ設定は、学内用にプロキシ通したまま。
PCをもって帰っても、わざわざoffにしたりはしてませんでした。
なので、もし家でIEを開けばプロキシエラーが出たんでしょうが。
Firefoxしか使ってなかったので、別段なんの問題もなかったんです。

しかし、問題はブラウジング以外でのネット接続。
たとえば、先にチラッといいましたが、
IEのプロキシ設定はMS Updateなどの接続にも適用される
のです。
だから、システムのプロキシ設定が不適当なままにしてあると。
在宅時にはMS Updateがされなくなってしまいます。

あるいはネット経由でライセンス認証するソフトなどもそう。
一部のソフトは、暗黙のうちにシステムのプロキシ設定を踏襲し。
それをつかってネットに接続して、認証をしようとするので。
プロキシ設定がおかしいと、認証で弾かれます。

わたしは在宅中にMS Officeをインストールして、ここでコケました。
Officeはインストール時に、ネット経由でアクティベートしますが。
さすがはMicrosoft社製のソフト。
黙っていても、システムのプロキシ設定を使うのですね。
そして、そのPCのプロキシ設定はつねにonのまま放置されており。
その作業時につながっていたのは、自宅のネット回線。
結果として、Officeがネットに接続できずに認証エラーになりました。

ということで、知っていれば当然のハナシなんですが。
移動式の端末の場合には、いちおうご注意ください。

(1-2) システムのプロキシ設定をRで利用する

さて、これでWindowsのプロキシ設定ができました。
あとは簡単です。
いつもRの起動に使っているショートカットを右クリックし、
[プロパティ]
を開いてください。


Rへのリンクのプロパティ

出てきたウィンドウに[リンク先]という項目があると思います。
ここには、
そのアイコンをダブルクリックしたときに実行するソフトの場所
が書いてあります。
その末尾に
--internet2
という文字を付け足してください。
(カギ括弧は抜きで。)

--」の前に「半角スペース」があるので、間違えないように。
"半角スペース"--internet2」の計12文字です。


[リンク先]への追記

インストール先が既定のままなら、[リンク先]は全体で
"C:\Program Files\R\R-3.0.2\bin\x64\Rgui.exe" --internet2
みたいなカンジになったと思います。
前半のごちゃごちゃ部分は、Rのバージョンによりけりですが。
いままでそのショートカットでRが起動していたなら、関係ありません。

いま足したのはソフト起動時の「オプション」というもので、
そのソフトをどういう状態で立ち上げるか
を指定するためのものです。
コマンドラインを使ったことがある人なら、おなじみですね。
--internet2」は、Rに
「ネットに接続する場合は、システムのプロキシ設定を踏襲しろよ」
と指定するためのおまじないなのです。

ただしこのおまじないは、
(いま[リンク先]を追記した)このショートカット
に対してかけたものです。
なので、Rをこのショートカット以外から起動した場合。
Rはシステムのプロキシ設定を参照してはくれません。
ショートカットが複数ある場合は、すべてに上記の作業をしてください。

以上でシステムのプロキシ設定を使わせる指定も完了。
ちゃんとネット上のファイルにアクセスできるようになったか。
ショートカットからRを起動し。
最初のスクリプトを実行して、ネット接続の可否を試してください。
source("http://noucobi.com/Rsource/tameshi.txt")

また、WindowsのRユーザには少数派かもしれませんが。
Rgui以外でRを使っている場合も、
--internet2
というオプションを与えてやればOKです。
(Rgui ... 独立のアプリケーションウィンドウとしてのR)

たとえばコマンドプロンプトからの利用なら、
> R --internet2
とすればシステムのプロキシ設定が使われます。


--internet2オプション付きでの端末からの起動

ところでこの「internet2」というおまじない。
聞き覚えありますか?
Win版Rでは、インスコ時に起動オプションが設定できまして。
このカスタマイズをしてるひとは、インストーラ中で
インターネット接続は「標準」「Internet2」のどっちにする?
という設問があった覚えがあるでしょう。


インストーラのここで[はい(カスタマイズする)]を選ぶと


その先で「Internet2設定を使うか?」と問われる

ここで訊かれているのが、まさに本項でやった作業のことでして。
この設問をより端的にすれば、
Rのショートカットに最初から" --internet2"って付けとく?
という問いかけなのです。

なので、インスコ時点でOSのプロキシ設定を使いたいとわかってれば。
ここで「Internet2」を選んどくとラクですね。
[リンク先]に端から" --internet2"がつけてもらえます。

今回は逐一説明したので、ダラダラ長くなりましたが。
慣れてしまえば、それほどややこしい作業でもありません。
残念ながらまだエラーが出ちゃっても、がっかりせず。
もう一度、手順を確認してみてくださいね。


(2) Sys.setenv関数でプロキシを指定する

この内容は、前項とは別の方法でプロキシ設定をする方法です。
(1)の方法で設定ができたなら、以下の作業は必要ありません。

こちらではRの組み込み関数からプロキシを設定する方法を説明します。
R初心者なかたは、たぶん前述の(1)の方法を使ってるとおもうので。
こちらの説明は多少簡略化して、スピードアップします。

Rはその動作を制御するための、さまざまな環境変数をもっています。
たとえばR_HOMEはRのインストールされた場所。
TZはタイムゾーンの設定です。
これらの環境変数は、Sys.getenv関数で参照できます。
> Sys.getenv("R_HOME")
[1] "/usr/lib/R"
環境変数の一覧は、オンラインヘルプでみられます。
?"environment variables"

で、Rのプロキシ設定も、これらの環境変数として保持されます。
Rが使うプロキシは、httpプロキシとftpプロキシの2種で。
環境変数名は、それぞれhttp_proxyftp_proxy
このなかにプロキシサーバのアドレスが格納されます。

プロキシ未設定の状態では、これらの環境変数は存在せず。
Sys.getenvで参照しても、空っぽです。
> Sys.getenv(c("http_proxy", "ftp_proxy"))
http_proxy  ftp_proxy 
        ""         "" 
これを適切な値にしてやればよい、と。

そこで環境変数の値を書き換えるのに使うのがSys.setenv関数。
これをつかって、
Sys.setenv(http_proxy="hogehoge", ftp_proxy="piyopiyo")
の形でプロキシサーバを指定します。
hogeとpiyo部分の書式は、
URLスキーム://プロキシサーバアドレス:ポート
というフォーマットにする必要があります。

URLスキームというのは、転送プロトコル名のこと。
ここでは"http"か"ftp"になりますね。
なので、たとえばhttpプロキシを設定するとして、
サーバアドレス ... example.hproxy.net
ポート番号 ... 8080
だったとすれば、Rに入力するコマンドは
Sys.setenv(http_proxy="http://example.hproxy.net:8080")
になります。

httpプロキシとftpプロキシはいっぺんに指定することができ。
一度のSys.setenvの呼び出しで同時に設定できます。
Sys.setenv(http_proxy="http://example.hproxy.net:8080",
  ftp_proxy="ftp://example.fproxy.net:8080")
http用とftp用が別の場合、アドレスを打ち間違えないよう注意です。

この方法のポイントは、第一に"http://"の部分を忘れないコト。
わたしは初めてこの方法を試みたとき、これでつまづきました。

というのも、わたしは当初Windowsユーザだったので。
前述の(1)のような、Windowsでのプロキシ設定に慣れてたのです。
で、上のほうのキャプチャ画像みてもらえばわかるんですが。
WindowsのGUIでは、
HTTPプロキシの設定はここに入力してくださいね
ってラベルされてる隣のテキストエリアに
対応したスキームのプロキシアドレスとポート
を書き込むようになってるので。
ここでのアドレスには、URLスキームは含めないんですよ。
"http://"とか"ftp://"は含まないアドレスを入力する。

わたしは当初、この書式に慣れていたので。
RからSys.setenvで設定しようとしたときも、
Sys.setenv(http_proxy="example.hproxy.net:8080")
のように、スキーム部分を除いたかたちで書いてしまった。
でも、これはRの要求する書式と違っているので。
これではちゃんとプロキシサーバが認識されず。
接続エラーになってしまうのです。

なので、とくにWindowsのプロキシ設定に慣れたかたは注意。
Sys.setenvで設定するときは、"http://"や"ftp://"が要ります。

それからもうひとつ、この方法のコツとしては。
Rを起動してすぐ、いろんな作業をする前に実行することです。
これは経験則なので、内部的な理由はわからんのですが。
そのセッション中(R起動からquitまで)にたくさん計算をしてたり。
Rの環境変数を変えてたりすると。
その後でSys.setenvでプロキシを設定しても、うまくいかない。
…ことが多いです。

なので、実際つかってるとよくあるんですが。
vanillaでR立ち上げて、のらくらデータ解析してて。
その途中でふと
「あ、あの解析ためしてみようかな」
とか思いついて、必要なパッケージを落とそうとし。
そのためにはプロキシ設定が必要なので、Sys.setenvするんだけど。
アドレスもポートもあってるのに、なぜかプロキシが通らない。
みたいなね。

このような問題につまづかないためにも。
Sys.setenvでのプロキシ設定は、R起動直後にやるのが吉です。
でも上記の例のように、もともとはネットにアクセスするつもりがない場合。
使うかどうかもわからんプロキシ設定のために、わざわざ
Sys.setenv(http_proxy="http://example.hproxy.net:8080",
  ftp_proxy="ftp://example.fproxy.net:8080")
なんていう長いコマンドを毎回打つのは、疲れますね。

この問題は、.Rprofileの仕組みを使って解決します。
.RprofileはRのスタートアップ・プロファイルという設定で。
実態はまんま「.Rprofile」という名前のテキストファイルです。
.txtや.Rといた拡張子はなく「.Rprofile」だけ。


.Rprofileファイル

Rには、起動時にこの.Rprofileという名前のファイルを探し。
もしみつかれば、その中身を自動で実行するという機能があります。
置き場所は何ヶ所かありますが、無難なのはユーザのホーム。
R起動直後に作業ディレクトリになっている場所です。
ホームディレクトリはHOME環境変数にも書いてあります。
> Sys.getenv("HOME")
[1] "/home/noukobi"

よって、ホームディレクトリに.Rprofileというファイルをつくり。
そのなかに、プロキシ設定用のコマンドを書いておけば。
毎回の起動ごとに、わざわざ手打ちする必要はありません。
もしすでに.Rprofileファイルがあったら、追記すればOK。

わたしの場合、この.Rprofileファイル内でプロキシ設定をし。
ついでにCRANミラーの指定もしています。
記述としてはこんなカンジ。
options(repos="http://essrc.hyogo-u.ac.jp/cran/")
Sys.setenv(http_proxy="http://proxy.xxxxxxxxxx:8080",
  ftp_proxy="ftp://ftp-xxxxxxxxxx:8080")
これを書いた.Rprofileをホームフォルダにおいておけば。
普通にRを起動しただけで、勝手にプロキシ設定が済みます。

.Rprofileファイルの例をここにおいておきますので。
必要であれば、ダウンロードしてサーバアドレス等を書き換え。
ホームフォルダにおいてからRを起動してください。
ただし、使ってるブラウザやOSによっては
ドットから始まるファイル名のファイル
にケチをつけられて保存できなかったりするため。
上記のリンク先は、ドットの前に余計な文字をいれてあります。
なので、ファイル名も「.Rprofile」に直して使ってください。
ちゃんとこの.Rprofileのなかみが実行されると、R起動時に
Current http proxy ... xxxxxxxxxx
Current ftp proxy ... xxxxxxxxxx
のようなメッセージが出るハズです。

認証が必要なプロキシについて

プロキシサーバは、機関によっては接続に認証が必要で。
アクセスする際に、ユーザ名とパスが必要になるものがあります。
その場合、Rからプロキシを経由する場合にも認証が必要なハズ。
たぶん、なにがしかのダイアログなんかが出る…のかな?

なにせ本学のプロキシは(幸運にも)ユーザ認証がないので。
わたし自身は経験したことがないのです。

一応、以下は机上の知識ですが。
Sys.setenvでプロキシ設定してる場合、認証情報も設定できるらしい。
httpプロキシのユーザ名とパスは、http_proxy_userなる環境変数に
ユーザ名:パスワード
というかたちで設定するか。
もしくはhttp_proxy環境変数の設定時に
URLスキーム://ユーザ名:パスワード@プロキシサーバアドレス:ポート
という書式でサーバアドレスのまえに挟むとのこと。

よってSys.setenv全体としては、
Sys.setenv(http_proxy="http://PROXY:PORT",
  http_proxy_usr="USER:PASS")
あるいは
Sys.setenv(http_proxy="http://USER:PASS@PROXY:PORT")
みたいになると思われます。
この書式についてはdownload.file関数のヘルプを参照。
?download.file

ftpプロキシについてはヘルプに言及がないので。
この方法が使えるかどうか、わかりません。

ちなみにSys.setenvでの設定は、前述の.Rprofileの利用が便利ですが。
一般論として、接続のユーザ名とパスワードは個人情報なので。
こうした設定まで.Rprofileなどに書き込んどくというのは…。
セキュリティ的にはいただけないとおもいます。

まあこの方法を使うユーザさんは、初心者ってことはたぶんなくて。
あたしよりよっぽど計算機に習熟してるとおもうので。
パーミッションかけるとか、シェルと組み合わせるとか。
なんか工夫していただければ、と。
(なんせ試す環境がないので……丸投げですみません。)


(3) ターミナルでRを使っている場合限定の方法

上記2つが、おそらく一般的なRのプロキシ設定方法ですが。
もうひとつ別解をあげておきます。
ただしこの方法はLinuxの端末上でRを使っている場合限定です。
(現Macは実質Linuxなので、Macでも使えるとは思います。)
該当しない方は、どうぞお読みとばしください。

さて、わたしは普段、UbuntuのターミナルからRを使ってまして。
こういう場合に使える簡単な方法…。
それはシェルの環境変数をRに引き継ぐことです。

Rはターミナルから起動する場合、
http_proxyftp_proxyという(シェルの)環境変数を引き継ぐ
という性質があります。
(「Rは」というか、これが環境変数の機能ですよね。)
よってRを起動する以前に、これらの値をシェルに設定しておけば。
R自体はvanillaでも、これがプロキシ設定になってくれます。

$ env http_proxy="http://hoge:8080" ftp_proxy="ftp://piyo:8080" R --vanilla

R version 3.0.2 (2013-09-25) -- "Frisbee Sailing"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: i686-pc-linux-gnu (32-bit)

> Sys.getenv(c("http_proxy", "ftp_proxy"))
        http_proxy          ftp_proxy 
"http://hoge:8080"  "ftp://piyo:8080" 

しかも、さらに便利なことに。
Linuxのプロキシ設定方法自体は、環境によってまちまちで。
どのセットアップファイルで指定されてるかはバラバラですが。
多くの場合、最終的に上記2つの環境変数がexportされます。

つまり、プロキシ設定の実装はケース・バイ・ケースだけど。
最後だけみれば、http_proxyftp_proxyができてる。
…って場合が多い。

たとえばわたしの場合、Ubuntuの
[システム設定]→[ネットワーク]→[ネットワークプロキシ]
からGUIでプロキシ設定しましたが。
bashを起動すれば、http_proxyftp_proxy変数があります。
(どこかの起動ファイルでexportされてるのでしょう。)

この場合、シェルを叩いた時点で必要な環境変数があるので。
もはやenvなんて使う必要もなく。
ただRを起動しただけで、プロキシ設定が通っている状態になります。

なので、ターミナルでRを使ってるひとはお得。
Rのプロキシ設定に無自覚でも、問題が生じないかもしれません。
シェルに環境変数がある場合だけですけどね。


おぼえがき

以上、Rにおけるプロキシ設定の方法を記しましたが。
問題は解決したでしょうか。
みなさんのRがちゃんとネットにつながるようになったことを祈りつつ。
ここからはちょっと雑談になります。

上記の手順は、一見めんどくさそうに思えます。
はじめてこういう作業をしたなら、たぶんウンザリでしょう。
ですが、大学人は頻繁にこの手の問題に直面するので。
ネットワークまわりの設定作業はわりと慣れていて。
その場合、上の手順はたいして面倒でもありません。

しかし、最初にわたしがこの問題でひっかかったときは酷くて。
大学からRでネットにアクセスするのに、結局3日ほどかかりました。
もちろん3日間ずっとこれを調べてたワケではないけれど。
「どーやったらいいのかな~」
とやってるうちに、繋がらないまま3日も経ってしまったのです。

原因はおもに2つ。

ひとつめは、Sys.setenvでの設定の仕方を間違えていたため。
これは(2)の項で書いたとおりでして。
当初わたしは、URLスキームをアドレスに含め忘れていたため。
何度やってもSys.setenvではプロキシが通らなかったんですね。

ちなみに当時は、Rのバージョンが2.8とか、そのぐらいのころで。
環境変数をいじるSys.putenv関数が廃止になったりとかなんとか。
初心者のわたしには、情報が錯綜してて迷う時代でした。

理由のふたつめは、「 --internet2」の意味を誤解していたこと。
当時、Rのプロキシ設定についてネットで検索すると、
「ショートカットに『 --internet2』って加えればおk」
みたいな簡単な記述が多かった。
でも先ほど述べたように、これは単に
「システムのプロキシ設定を使ってね」
っていう指定なので。
OS側でプロキシが設定されてないと意味がないのです。
まあ今となってはあたりまえのハナシですね。

しかしそんな事情を知らない若かりしころの私。
Windows自体のプロキシ設定はノータッチのまま。
Rショートカットの[リンク先]追記のプロセスだけやって、
「『 --internet2』って入れたのにつながんないじゃんかよー」
ってなコトになっていたのです。

思うにわたしがみたサイトの説明は、
OSのプロキシ設定は終わってる
という前提だったんでしょうね。
たしかに大学のPCなら、プロキシ設定はフツー最初にやってるので。
そのうえで
「Rでネットに繋がらない!」
って場合には、「 --internet2」の追加だけで済む。

ではなぜわたしは、OSのプロキシ設定をしていなかったのか。
それはブラウザがFirefoxだった(というかIEでなかった)から。
これも前述のとおりですね。

多くのブラウザ同様、Firefoxも自前のプロキシ設定をもってて。
(IE経由での)Windowsのプロキシ設定は空白のままでも、
Firefoxのなかでできる、Firefoxだけに使われるプロキシ設定
がしてあれば、ネット閲覧は問題なくなるんですね。
ネットワークだのプロキシだのを理解不足だったわたしは、これにより
ブラウジングはできるように設定済みだけど、OSのプロキシ設定はしてない
という状況になっていた。
そしてそれに無自覚だったというわけです。
これが2点目の落とし穴でした。

ということで、これらの穴に足をとられていた結果。
Rのネット接続設定に、時間がかかってしまったわけです。
こんな失敗談、なんの足しになるともおもえないのですが。
万一、似た状況で苦しんでるかたの参考になれば、ということで。
こうして恥さらしな文章を公開している次第です。

この記事を読んでくださった方は、こんな苦労をせず。
楽しいRライフを送れることを願います。
(-人-)南無三

最後に、一連の作業で参照させていただいたサイトを挙げておきます。
本ページでのわたしの説明とは、違う見解な部分もありますが。
プロキシ設定の際には、参考になさってください。

Rjpwiki CRAN国内ミラーの使い方
統計処理ソフトR入門 講習会資料 Rのインストールと設定
本学のネットワークユーザガイド(学内専用ページにつき非リンク)
【R入門】R2.6.2のセットアップ(リンク切れ)