web-dev-qa-db-ja.com

Rに環境変数を読み取らせるにはどうすればよいですか?

EC2スポットインスタンスでRを実行しています。スクリプトが実行されたら、インスタンスを終了してスポットリクエストをキャンセルするためにRが必要です。

そのため、「リクエストID」を/.bashrcの環境変数に設定しました。私の計画は、スクリプトの準備ができたら、次のコードをRに呼び出すだけでした。

system("ec2-cancel-spot-instance-requests $SIR")

私が抱えている問題は、RがenvをRの外側から入力したときに見たのと同じ環境変数を「見ない」ため、コマンドが機能しないことです。

私は確認しましたが、環境変数を/etc/environmentに設定した場合、Rはそれらの変数を表示できますが、他の問題があります。これらの変数は動的(インスタンスIDとリクエストIDはスポットインスタンスが作成されるたびに異なる)なので、次の形式で変数を作成するスクリプトを実行しています。

export SIR=`cat /etc/ec2_instance_spot_id.txt`

そのファイルに動的IDが含まれている場所

では、「動的」環境変数を/etc/environmentに挿入するにはどうすればよいですか?または、Rに/.bashrcの環境変数を読み取らせるにはどうすればよいですか?

正しい方向のどんなチップでも大歓迎です!

23
JordanBelf

たとえば、Sys.getenv()のようにSys.getenv("PATH")が必要です。

またはあなたの例として、試してください

_SIR <- Sys.getenv("SIR")   
system(paste("ec2-cancel-spot-instance-requests",  SIR))
_

起動時の変数の設定については、help(Startup)を参照して_~/.Renvironment_などについて学習します。

25

Sys.getenv()を使用すると、現在の環境にリストされているすべての変数が表示されます。

ただし、現在のシェルで使用されているものとは異なります。たとえば、.profileで指定されています。

Rの変数を設定するには、ホームディレクトリに.Renvironファイルを作成してそこに書き込みます

MYDIRECTORY="/home/wherever"

Rを再起動すると、この変数にアクセスできるようになります

Sys.getenv("MYDIRECTORY")
10
Thorsten

私はRにかなり慣れていますが、私のアプローチは次のとおりでした。プロジェクトレベルの環境変数を.envファイル。 Rでアクセスできるようにするために、私は

> readRenviron(".env")

次に、特定の変数にアクセスするには

> Sys.getenv("RDS_UID")

そして、それは完璧に機能しました。

2
cheevahagadog