Rスクリプトのスケジューリング


113

データベースから一部のデータをプルし、それにいくつかの操作を実行して、出力を新しいデータベースにポストするRスクリプトを作成しました。

このスクリプトを毎日特定の時間に実行したいのですが、効果的に実行する方法が見つかりません。

この問題を解決するために私が見ることができるリソースを誰かが推薦できますか?このスクリプトをWindowsマシンで実行しています。

回答:


108

実際には、Windowsでは、スケジューラを使用するために最初にバッチファイルを作成する必要はありません。

  • スケジューラを開きます:スタート->すべてのプログラム->アクセサリ->システムツール->スケジューラ
  • 新しいタスクを作成する
  • [アクション]タブで、新しいアクションを作成します
  • プログラムの開始を選択します
  • たとえば、ここに配置する必要があるRscript.exeを参照します:
    "C:\ Program Files \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • パラメータフィールドにファイルの名前を入力します
  • 開始フィールドにスクリプトが見つかるパスを入力ます
  • [ トリガー ]タブに移動します
  • 新しいトリガーを作成する
  • タスクを毎日、毎月、...数回繰り返すか、好きなように実行することを選択します

3
はい、ありがとうございます!これは私にとってうまくいったものであり、上記ではなく、ウェブ上に浮かんでいる他のさまざまな答えでもありません。私は、ファイル拡張子が.Rであってないことを確認することだけを追加します.r
esa606 2014

それはどういう意味ですか-何が起こると思いますか?たぶん、これはそれ自体の問題に入るはずです(おそらくSOに回答があります)。
petermeissner 2016

1
dosウィンドウを最小化する方法はありますか?
George Dontas

58

Rスクリプトがmytest.rにあるとするとD:\mydocuments\、次のコマンドを含むバッチファイルを作成できます。

C:\R\R-2.10.1\bin\Rcmd.exe BATCH D:\mydocuments\mytest.r

次に、それを新しいタスクとしてWindowsタスクスケジューラに追加し、トリガー条件を設定します。

バッチファイルを省略することもできます。タスクスケジューラC:\R\R-2.10.1\bin\Rcmd.exeprogram/scriptテキストボックスに設定し、Arguments残りの初期コマンドとして次のように指定します。BATCH D:\mydocuments\mytest.r

Windowsタスクスケジューラを介したRタスクのスケジュール(2015年2月11日)

taskscheduleR:WindowsタスクマネージャーでRスクリプトをスケジュールするRパッケージ(2016年3月17日)

編集

cmdウィンドウを最小化したかった(別の方法を見つけることができなかった)ため、私は最近再びバッチファイルの使用を採用しました。

具体的には、WindowsのタスクスケジューラActionsタブに次のように入力します。

Program/script:

cmd.exe

Add arguments (optional):

/ c start / min D:\ mydocuments \ mytest.bat ^&exit

mytest.batの内容

C:\ R \ R-3.5.2 \ bin \ x64 \ Rscript.exe D:\ mydocuments \ mytest.r params


16
を使用するRscriptことをお勧めしR BATCHます。小文字と大文字を区別できるシステムも取得rします。
Dirk Eddelbuettel

おかげで、私はそれを使用していませんでした。私が見たように、引数はスクリプトに渡され、commandArgsを使用してアクセスすることもできます
George Dontas

5

これを行うには、RStudioに組み込みオプションがあります。これは、スケジューラーを実行してパッケージの下に最初にインストールすることです。

  install.packages('data.table')
  install.packages('knitr')
  install.packages('miniUI')
  install.packages('shiny')
  install.packages("taskscheduleR", repos = "http://www.datatailor.be/rcube", type = 
  "source")

インストールした後

**TOOLS -> ADDINS ->BROWSE ADDINS ->taskscheduleR -> Select it and execute it.**

ここに画像の説明を入力してください


これは私にはうまくいきません。アドインを実行しようとすると、次のエラーが表示されます:必要な名前空間の読み込み:エラーありで失敗: '行列の列の数は一致する必要があります(引数2を参照)'必要な名前空間の読み込み:miniUIエラーで失敗: '列の数の行列は一致する必要があります(arg 2を参照) 'rbind(info、getNamespaceInfo(env、 "S3methods")のエラー):行列の列の数は一致する必要があります(arg 2を参照)
obewanjacobi

このエラーを解決するためにdata.tableを更新したところ、次のエラーメッセージが表示されました。エラー:名前空間 'data.table'の読み込み中にオブジェクト 'as.xts'が見つかりません
obewanjacobi

1
これらが機能するためには、RStudioを開いたままにする必要がありますか?
cgage1

1
R studioが閉じていると、自動的に開いてスクリプトが実行されると思います。
Zeeshan、

4

SCHTASKSプログラムを介してタスクを設定しました。起動時にスクリプトを実行するには、次のように記述します。

SCHTASKS /Create /SC ONSTART /TN MyProgram /TR "R CMD BATCH --vanilla d:\path\to\script.R"

の詳細については、このWebサイトを参照してくださいSCHTASKS。詳細については、MicrosoftのWebサイトをご覧ください。



2

タスクスケジューラの設定

手順1)タスクスケジューラを開きます([スタート]> [タスクスケジューラの検索])

ステップ2)[アクション]> [タスクの作成]をクリックします

手順3)[ユーザーがログオンしているときにのみ実行する]を選択し、[最高の権限で実行する]をオフにして、タスクに名前を付け、[Windows Vista / Windows Server 2008]を構成します。

ここに画像の説明を入力してください

ステップ4)[トリガー]タブで、スクリプトを実行するタイミングを設定します

手順5)[アクション]タブで、Rscript.exeファイルの完全な場所を配置します。

"C:\Program Files\R\R-3.6.2\bin\Rscript.exe" (include the quotes)

with -esource()in を使用してスクリプトの名前を次のようにラップします:

-e "source('C:/location_of_my_script/test.R')"

ここに画像の説明を入力してください

タスクスケジューラでスケジュールされたRscriptのトラブルシューティング

タスクスケジューラを使用してスクリプトを実行すると、エラーメッセージが表示されないため、問題のトラブルシューティングが困難になります。

これはsink()、R の関数を使用して解決できます。この関数を使用すると、指定したファイルにすべてのエラーメッセージを出力できます。これを行う方法は次のとおりです。

# Set up error log ------------------------------------------------------------
error_log <- file("C:/location_of_my_script/error_log.Rout", open="wt")
sink(error_log, type="message")

try({

# insert your code here

})

Rscriptを機能させるために変更しなければならないもう1つのことは、スクリプト内のファイルパスの完全なファイルパスを指定することです。

これはタスクスケジューラでは機能しません。

source("./functions/import_function.R")

Rscript内でソースしているスクリプトの完全なファイルパスを指定する必要があります。

source("C:/location_of_my_script/functions/import_function.R")

1

これらの手順の組み合わせを実行した"Argument Batch Ignored"後、R.exeの実行後にエラーが発生した場合は、これを試してみてください。

Windowsタスクスケジューラ:

BATCH "C:\Users\desktop\yourscript.R"引数フィールドで置換

CMD BATCH --vanilla --slave "C:\Users\desktop\yourscript.R"


1
これは、Mark Byersの回答(またはおそらくその回答の編集)へのコメントとして理にかなっていますが、それだけでは成り立たないと思います。
グレゴールトーマス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.