質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2658閲覧

rpy2に関して、Rのディレクトリの場所をどのように特定しているのでしょうか

shihatu

総合スコア2

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/01/05 05:02

編集2022/01/05 05:35

<環境>
os:windows10
実行環境:anaconda3 - jupyter notebook
主要ライブラリ:rpy2 3.7

〈本文〉
pythonでRを使用するためのrpy2というライブラリについて質問です。python環境下でrpy2を利用してRを使用することに成功しました。一つ疑問なのですが、タイトルにもあるとおり、rpy2はどのようにしてRのディレクトリの特定をしているのでしょうか。例えば、Rのディレクトリの場所を移動させた場合、rpy2は機能しなくなるのでしょうか。
また、rpy2が参照しているRのディレクトリへのPATHを表示させる方法はありますでしょうか。

〈補足〉
実はR本体をインストールする際に、公式のRとanaconda-navigatorを使用してconda環境下のRの両方を以前インストールしました。そして、新しくRのライブラリ(以下Xとする)をconda環境下でインストールしてrpy2を利用しpython環境下で使用しようと試みたところXが見つかりませんでしたというエラーを検出しました。
そこで、Xを、「conda環境のディレクトリ」から「R公式からRのライブラリが格納されているディレクトリ」に、ドラッグ&ドロップで移動させたところ、うまく行きました。
つまり、rpy2が参照していたのはR公式からインストールしていたRでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下の get_r_exec()R のパスを決定しています。

get_r_exec() rpy2/situation.py at master · rpy2/rpy2

python

1def get_r_exec(r_home: str) -> str: 2 """Get the path of the R executable/binary. 3 4 :param: R HOME directory 5 :return: Path to the R executable/binary""" 6 7 if sys.platform == 'win32' and '64 bit' in sys.version: 8 r_exec = os.path.join(r_home, 'bin', 'x64', 'R') 9 else: 10 r_exec = os.path.join(r_home, 'bin', 'R') 11 return r_exec

この関数の引数 r_home ですが、get_r_home() 関数の戻り値になります。

get_r_home() rpy2/situation.py at master · rpy2/rpy2

python

1def get_r_home() -> Optional[str]: 2 """Get R's home directory (aka R_HOME). 3 4 If an environment variable R_HOME is found it is returned, 5 and if none is found it is trying to get it from an R executable 6 in the PATH. On Windows, a third last attempt is made by trying 7 to obtain R_HOME from the registry. If all attempt are unfruitful, 8 None is returned. 9 """ 10 11 r_home = os.environ.get('R_HOME') 12 13 if not r_home: 14 r_home = r_home_from_subprocess() 15 if not r_home and os.name == 'nt': 16 r_home = r_home_from_registry() 17 return r_home

環境変数 R_HOME が設定されていればそれを使いますが、設定されていない場合は r_home_from_subprocess() を実行します。具体的には R RHOME を実行しています。

r_home_from_subprocess() rpy2/situation.py at master · rpy2/rpy2

python

1def r_home_from_subprocess() -> Optional[str]: 2 """Return the R home directory from calling 'R RHOME'.""" 3 try: 4 tmp = subprocess.check_output(('R', 'RHOME'), universal_newlines=True) 5 except Exception: # FileNotFoundError, WindowsError, etc 6 return None 7 r_home = tmp.split(os.linesep) 8 if r_home[0].startswith('WARNING'): 9 res = r_home[1] 10 else: 11 res = r_home[0].strip() 12 return res

つまり、

  1. R_HOME 環境変数が設定されている
    R_HOME 環境変数から R に実行バイナリのパスを決定。

  2. R_HOME 環境変数が設定されていない
    R RHOME の実行結果から R の home directory を取得して R の実行バイナリのパスを決定。

となります。

python

1>>> import sys 2>>> sys.platform 3'linux' 4 5>>> import rpy2.situation 6>>> rpy2.situation.get_r_exec(rpy2.situation.get_r_home()) 7'/usr/lib/R/bin/R'

bash

1$ R RHOME 2/usr/lib/R 3$ ls -l $(R RHOME)/bin/R 4-rwxr-xr-x 1 root root /usr/lib/R/bin/R

投稿2022/01/05 06:15

melian

総合スコア20655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shihatu

2022/01/05 07:44

非常に完結かつ丁寧な回答ありがとうございます。理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問