ネット上にあるcsvファイルをダウンロードしてきて使う場合、read.table()にurlを与えて直接データフレームをつくってしまう場合もあれば、ファイルとしてダウンロードして置いておきたい場合もあります(実行のたびにダウンロードしたくない等の理由で)。
で、実行するときに、すでにダウンロード済みなのであれば再ダウンロード(上書き)はしたくないという場合があるので、確認しながらダウンロードできると便利です。
簡単な処理ではありますが、コードの使い回しのためにここに書いておきます。
そのファイルがすでに存在するかどうかをメッセージで表示した上で、ダウンロードするかどうか訊いてくるので、コンソールでyを入力したらダウンロード、nを入力したら中止ということにしておきます。
ファイルがすでに存在する場合、そのファイルの更新日時を確認してから(たとえば古かったら)ダウンロードしたいという場合もあるので、更新日時も取得して表示するようにしておきます。
処理確認ダイアログを出す関数askYesNo()の使い方は、askYesNoのドキュメントをみてください。
confirm_file_dl <- function(url,dst){ # dstには保存するときのパス&ファイル名を与える if(file.exists(dst)) { message(paste('\n\"', dst, '\"', ' already exists!', sep='')) mtime <- file.info(dst)$mtime # ファイルの更新日時の取得 message(paste('(Last modified at ', mtime, ')\n', sep='')) } else { message(paste('\n\"', dst, '\"', ' doesn\'t exist!\n', sep='')) } dl_or_not <- askYesNo(msg='Do you want to download the file?', default = FALSE, prompts = 'y/n/na') if(dl_or_not==TRUE) { download.file(url, destfile = dst) } }
たとえばGoogleのモビリティ・レポートのファイルは、国別データは1ファイルにまとまってるのですが、現時点で600MBもあって、外出中にテザリングで作業してる時なんかは、必要ないならダウンロードしたくないですね。
ファイルがすでに存在する場合。
> confirm_file_dl(url='https://www.gstatic.com/covid19/mobility/Global_Mobility_Report.csv', + dst='source/Global_Mobility_Report.csv') "source/Global_Mobility_Report.csv" already exists! (Last modified at 2021-08-17 18:13:17) Do you want to download the file? (y/n/na)
ファイルが存在しない場合。(nを入力してダウンロードを実行)
> confirm_file_dl(url='https://www.gstatic.com/covid19/mobility/Global_Mobility_Report.csv', + dst='source/Global_Mobility_Report.csv') "source/Global_Mobility_Report.csv" doesn't exist! Do you want to download the file? (y/n/na) y trying URL 'https://www.gstatic.com/covid19/mobility/Global_Mobility_Report.csv' Content type 'text/csv' length 637979115 bytes (608.4 MB) ================================================== downloaded 608.4 MB