Rscript.exeを使ったバッチ実行ツールの記事の続きです。
記事その1はこちらをご覧下さい。
【R言語&Javascript】Rスクリプトをバッチ実行する(その1) - こちにぃるの日記
Rscript.exeで設定した引数の受け取り方法を解説します。
引数の設定は、次のとおりでした。
Rscript.exe [Rスクリプトのファイルパス] [引数1]
この[引数1]をどう受け取るか。
先に方法を掲載しますが、commandArgs関数を使います。
commandArgs(trailingOnly=TRUE)[1]
末尾の[1]が[引数1]の指定にあたります。[2]とすれば[引数2]です。簡単ですね。
なお、trailingOnly=TRUEをつけておかないと引数以外の情報も持ってきてしまうようなので、TRUEにします。デフォルトはFALSEです。
ということで、検証のため、以下のサンプルコードを用意しました。
ggplot2で作図~出力し、その後、printでエラーを発生させています。
バッチ実行時に正常にグラフを出力できるか、エラーがログに出力されるかを検証します。
#=============================================================================== # バッチ実行用のテストファイル #=============================================================================== #------------------------------------------------------------------------------- # 環境設定 #------------------------------------------------------------------------------- ###--- Set dir args <- commandArgs(trailingOnly=TRUE)[1] #-- 引数1を受け取る if (is.na(args)==TRUE) { myPath <- dirname(rstudioapi::getSourceEditorContext()$path) #-- 引数1がNAなら本スクリプトがあるフォルダパスを取得(バッチ実行ではないと判断)。 } else { myPath <- args #-- 引数1がNAでなければ引数1で指定したパスを格納。 } setwd(myPath) getwd() ###--- library library(tidyverse) #------------------------------------------------------------------------------- # 実行 #------------------------------------------------------------------------------- ###--- サンプルデータ作成 ads <- data.frame(x1=seq(1:10),y1=seq(1:10)) ###--- グラフ作成 g1 <- ggplot(ads, mapping=aes(x=x1, y=y1)) + geom_point() ggsave(filename = "fig_test_バッチ実行用.png", g1) print(a) #------------------------------------------------------------------------------- # End of File #-------------------------------------------------------------------------------
検証結果は以下です。
正常にグラフが出力され、エラーがログに記載されています。
【グラフ出力】
バッチ実行後の出力イメージ(例)
【ログ出力】
----------------------------------------------------------------------------------- 対象ファイル:C:/Users/XXXX/R/test/test_バッチ実行用.r 実行日時 :2020年11月21日 22時41分16秒 ----------------------------------------------------------------------------------- [1] "C:/Users/XXXX/R/test" -- Attaching packages --------------------------------------- tidyverse 1.3.0 -- √ ggplot2 3.3.2 √ purrr 0.3.4 √ tibble 3.0.1 √ dplyr 1.0.0 √ tidyr 1.1.0 √ stringr 1.4.0 √ readr 1.3.1 √ forcats 0.5.0 -- Conflicts ------------------------------------------ tidyverse_conflicts() -- x dplyr::filter() masks stats::filter() x dplyr::lag() masks stats::lag() Saving 7 x 7 in image print(a) でエラー: オブジェクト 'a' がありません 実行が停止されました -- ----------------------------------------------------------------------------------- End of File -----------------------------------------------------------------------------------
ということでここまで。