web-dev-qa-db-ja.com

Rシステム関数は常にエラー127を返します

Rから外部ツールを実行し、そのツールでエラーが発生した場合はそれを処理する必要があります。私は自分のタスクに精通した何かをするための3つの機能を知っています。

Shell, system and system2.

それらをテストしようとすると、そのコマンドが表示されます

Shell("notepad") 

メモ帳を開きます。私の知る限り、シェルはエラーをチェックできません(stderrを調べるインターフェースはありません)。

私が電話するとき

system("notepad")

または

system2("notepad") 

Rこれらのコマンドを作成しようとしてフリーズします。

呼び出し中

system("start notepad") 

または

system2("start notepad") 

警告を返します

Warning message:
running command '"start notepad"' had status 127 
12
Powerfool

私のコメントで述べたように、Rのドキュメントは、Windowsでsystem()関数が(必要な場合)別のシェルを起動しないことを明らかにしています。これが、コマンドラインコマンドがsystem()で実行されるのに、別のウィンドウを必要とするメモ帳が実行されない理由です。

documentation for system()から:

最も重要な違いは、Unixに似たシステムでシェルを起動してからコマンドを実行することです。 Windowsでは、コマンドは直接実行されます–シェル経由でコマンドを実行するインターフェイスにシェルを使用します(デフォルトでは、Windows Shell cmd.exeには多くのPOSIXシェルとの違い)。

5
Tim Biegeleisen

@DavidTsengの回答を適合させる(それを支持するのに十分な評判を持っていないためごめんなさい)...

system("cmd.exe", input = "notepad")

windowsで働いていました。

14
Jonas Luz Jr.
system("bash -l", input = "notepad")
3
KST

windowsユーザーの場合:system(path("c:", "program files", "r", "anysoft.EXE"))が動作します:system(path("c:", shQuote("program files"), "r", "anysoft.EXE"))

あなたたちはそれをとても複雑にしています。 this answer を参照してこの問題を解決しました。問題はPATHにあります。 RにSys.which('')と入力すると、何も表示されません。このため、CMDでパスを設定し、RでSys.setenv(PATH = '')を使用してこの作業を行う必要があります。

0
Bowen Chen

質問がほぼ4年前に尋ねられて以来、これを許可するRの更新があったかどうかはわかりませんが、system("\"C:\path\to\exe.exe\" args", intern = T)は私のために機能し、別の子ウィンドウを表示し、Windows 10で動作します+ R 3.6 + RStudio。

'intern = T'を使用しないと127のリターンコードが返され、プロセスは実行されませんでした。

0
Andrew Rohne