以下の 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
つまり、
-
R_HOME
環境変数が設定されている
R_HOME
環境変数から R
に実行バイナリのパスを決定。
-
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 07:44