はじめに
ライティングの授業で(またそれかよ),次のようなことを考えました。
テンプレートのファイルを作って,学生の人数分だけコピーし,さらにそれぞれのファイルに学生の名前をつけたい!
まず思いつくのは,雛形ファイルを作り,Ctrl+CとCtrl+Vを駆使して学生の人数分のファイルを用意し,1つずつファイルをリネームするといういわゆる土方作業ですが,そんなことやってられませんよね。というわけで,Rで簡単にファイル複製とリネームをやってしまおうということです。別に特別なことはしておらず,自分用のメモです。もっと簡単な方法があれば教えてください。
ワーキングディレクトリを変更
まず,ワーキングディレクトリを,テンプレファイルが置いてある場所に変更しましょう。
setwd("C:/Users/Yu/Desktop/test")
getwd()
## [1] "C:/Users/Yu/Desktop/test"
必要な情報を取得
ファイルをコピーする際にフルパスを使うので,その情報をあらかじめ変数に入れておきます。そして,list.files()関数で,ワーキングディレクトリ内にあるファイルの情報を取得します(別に1つしかないので手入力でもOKです)。そして,originalという変数に,テンプレファイルのフルパスを入れておきます。
dirnow<-getwd()
file<-list.files()
original<-file.path(dirnow,file)
ファイル名の準備
ファイルにつける名前の準備です。ここでは例としてアルファベットを使っていますが,学生の名前を使う場合は学生の名前をコピペする等してname変数に入れてください。その後,テンプレファイルの前に名前をつけてfilenameという変数に入れています。sep=”_”は区切り文字をアンダーバーで指定しているということなので,ここは任意の文字に変えられます。
name<-LETTERS[1:26]
filename<-paste(name,"test.docx",sep="_")
print(filename)
## [1] "A_test.docx" "B_test.docx" "C_test.docx" "D_test.docx" "E_test.docx" ## [6] "F_test.docx" "G_test.docx" "H_test.docx" "I_test.docx" "J_test.docx" ## [11] "K_test.docx" "L_test.docx" "M_test.docx" "N_test.docx" "O_test.docx" ## [16] "P_test.docx" "Q_test.docx" "R_test.docx" "S_test.docx" "T_test.docx" ## [21] "U_test.docx" "V_test.docx" "W_test.docx" "X_test.docx" "Y_test.docx" ## [26] "Z_test.docx"
ファイルのコピーとリネーム
それでは,ここで,ファイルのコピーとファイルの名前変更をfor関数で一気に行います。file.copy()関数は,fromでコピー元,toでコピー先を指定します。この時,fromではもとファイルのフルパスであるoriginalを使います。そして,toのところで,「ワーキングディレクトリ+名前変更後のファイル名」を指定してあげると,コピーされたファイル名に名前がつくことになります。paste()関数は,文字列結合の関数です。ファイルの一覧の中にblog.htmlとblog.Rmdというファイルが入っていますが,この2つはこのブログのために作ったファイルですので関係ないです。
for (i in 1:length(filename)){
file.copy(from=original,to=paste(dirnow,filename[i],sep="/"))
}
list.files()
## [1] "A_test.docx" "B_test.docx" "blog.html" ## [4] "blog.Rmd" "C_test.docx" "D_test.docx" ## [7] "E_test.docx" "F_test.docx" "G_test.docx" ## [10] "H_test.docx" "I_test.docx" "J_test.docx" ## [13] "K_test.docx" "L_test.docx" "M_test.docx" ## [16] "N_test.docx" "O_test.docx" "P_test.docx" ## [19] "Q_test.docx" "R_test.docx" "S_test.docx" ## [22] "T_test.docx" "test.docx" "test.Rproj" ## [25] "U_test.docx" "V_test.docx" "W_test.docx" ## [28] "X_test.docx" "Y_test.docx" "Z_test.docx"
こんな感じでファイル複製とリネームができます。Google Classroomを使っていると、教材ファイルをコピーして配布という機能があり、それを使うと自動的に学生の名前のついたファイルができるのですが,それなしでやろうとすると,こうなるかなという感じです。
これを使って何をするかという記事はまた改めてポストしようと思います。
なにをゆう たむらゆう。
おしまい。