【R言語&Javascript】Rスクリプトをバッチ実行する(その2)

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
#-------------------------------------------------------------------------------

検証結果は以下。
正常にグラフが出力され、エラーがログに記載されている。

【グラフ出力】

f:id:cochineal19:20201123105046p:plain

バッチ実行後の出力イメージ(例)

【ログ出力】

-----------------------------------------------------------------------------------  
 対象ファイル: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  
-----------------------------------------------------------------------------------  

 

ということでここまで。

 

参考


commandArgs function | R Documentation

本ブログは個人メモです。 本ブログの内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。