備忘 of 備忘 of 備忘
Motivation
ちょっと色々あってMacからWindowsに乗り換えることになり(8年振りくらい)、
自分で作った関数や色々な分析の記録も含めRのコードをそのまま新しい環境にうつした。
基本的にはOSに依存しないで動くものであるので、あまり考えるところはない。
しかし、置かれるディレクトリの場所がどうしても変わってしまい、source("")やload("")などのdirectoryの指定先が変わるので、そこに関しては一括で書き換えなくてはいけない。
具体的には、Macだと
source("/Users/Name1/xxx.R")
となっていたのを、Windowsでは
source("C:/Users/Name2/yyy/xxx.R")
みたいに該当のフォルダにかえなくてはならない。
この処理が単純そうに見えて意外と思いつかなかったのでメモしておく。
Implementation
How to read txt file and replace word in R? - Stack Overflow
↑このURLを参考にした。
ファイルのパスの一覧の取得
まず、Rのファイル一式のパスを取得する。
自分はRのコードファイルの拡張子を「.R」にしているので、それを正規表現で拾ってきている。
dir_tgt <- list.files( "C:/Users/Name1/Documents/R/", pattern = ".*\\.R" , recursive =T , include.dirs=F) dir_list <- paste0( "C:/Users/Name1/Documents/R/" , dir_tgt)
recursive=Tで配下のディレクトリまで探知範囲にすることを、include.dirs=Fでフォルダのパスは取得しないことを指示している。
二行目では後々のためにフルパスにしている。
つぎに、中身を一括で書き換えるための関数をつくる
中身を書き換える関数を実装する
ファイルのパスを指定すれば、load()やsource()で使われている中身のディレクトリを書き換えてくれる関数をつくる
reToWin <- function(tdir){ old_txt <- readLines( tdir , encoding = "UTF-8") new_txt <- gsub("/Users/Name2/Documents/" , "C:/Users/Name1/Documents/", x = old_txt) writeLines(new_txt , con = tdir , useBytes=T) } #function
readLines()のほうのencoding = "UTF-8"と、writeLines()のuseBytes=Tをいれないと自分の環境では文字化けした。
多くのMac→Windowsの移行でも一緒だと思う(たぶん)