タグ別アーカイブ: ライフハック

[R] 同じディレクトリ内でファイルを複製する

はじめに

ライティングの授業で(またそれかよ),次のようなことを考えました。

テンプレートのファイルを作って,学生の人数分だけコピーし,さらにそれぞれのファイルに学生の名前をつけたい!

まず思いつくのは,雛形ファイルを作り,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を使っていると、教材ファイルをコピーして配布という機能があり、それを使うと自動的に学生の名前のついたファイルができるのですが,それなしでやろうとすると,こうなるかなという感じです。

これを使って何をするかという記事はまた改めてポストしようと思います。

なにをゆう たむらゆう。

おしまい。

広告

R MarkdownからそのままWordPressに

下記は,Rmarkdownの出力をそのままWordPressに流し込むためのテストです。Rmarkdownファイルを開いたときに入っているデフォルトのコードと文章です。RmarkdownからWordPressに流すために必要な作業については下記ウェブサイトが参考になりました。

R markdownの出力をWordpressへそのまま投稿する | On Your Mark . Tokyo

ただし,plotの画像が表示されなかったので,それを解決するために下記のウェブサイトも参考にしました。

How to publish with R Markdown in WordPress

 

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

plot of chunk pressure

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Scrivenerで相互参照と連番作成

私は,論文執筆にScrivenerという有料のソフトウェアを使っています(Mac版)。バインダー機能とか語数の管理とか,色々便利なことはあるのですが(参考:Scrivener — A perfect program for dissertation writing),今日は論文執筆中にこれできてほしいと思った機能のやり方を覚えたので自分的メモを残しておきます。

私が文法を主に扱う論文を書くことが多いからなのかもしれませんが,例文をたくさん論文の中に挿入するんですね。以下のような感じで。

In (1), the omission of the plural morpheme makes the sentence ungrammatical.

(1) * I should have finished these thing by yesterday.

私の能力不足なのかもしれませんが,例文を後から足したり引いたりとかもしますし,また頭から順番に書いていくというわけでもないので,番号がずれてしまうことがあります。その対処法として,Xとかを使って最初に書くときはすべて番号をXで置き換えて,最終的にScrivenerからWordに原稿を出力してフォーマットなどを調整する際に最初から読み直して番号を振っていくという方法を取っていました。図表番号にも同じようなことをしていて,Table X shows…as illustrated in Figure X,というように書いておいてからあとで直していました。ただ,この方法だとやっぱり番号がずれたりしてしまうことがあって,自分でも気づかずに査読者に指摘されることもしばしばありました。図表に関しては,Wordでは図表番号の挿入という機能があるので,それを使うようにしています。図表番号の挿入を使っていれば,相互参照の挿入もできるみたいですね。で,例文でもこれを応用したりマクロを使ったりするとそういうことができるようなのです。言語学では例文がたくさん挿入されますから,そういった方たちにとっては死活問題ですよね。

参考

Wordで例文の番号を自動で連番にする

研究者のための Word 利用法 (3)

統語論恐怖症: Wordで連番機能を使う

ただし,これもScrivenerの中でできるならそうしてしまいたいわけです。そこで,「Scrivener 相互参照」でぐぐってみても,外部ファイルの参照みたいな記事はあるのですが,本文中で連番を作成したり相互参照をするよう方法は見つけられず。そこで,「scrivener cross」まで打つと,次に「reference」が出てきます。

参考

Unvexed: Stuff that Works: How to do cross-references in Scrivener

Has anyone figured out a way of cross-referencing examples in the …

A better way to force sequential ordering of numbered items

簡単に言うと<$n>タグを使うと,コンパイルするときに自動で連番作成してくれて,相互参照されるようになっているようです。<$n:ex>,<$n:fig>, <$n:tab>のようにすることで,ex,fig,tabごとに連番を作ってくれるみたいです。さきほどの例でいえば,<$n:ex:first>,<$n:ex:second>のようにしてあげれば,そこに数字が自動的に挿入されるという仕組みです。手でいちいちこのタグを打ち込むのは面倒だと思う方もいるかもしれませんが,私としては結構画期的だと思うので使っていきたいです。

一つ問題は,先ほどのタグは純粋にアラビア数字にしか置換されないということです。つまり,

In <$n:ex:first>, the omission of the plural morpheme makes the sentence ungrammatical.

<$n:ex:first> * I should have finished these thing by yesterday.

のようにscrivener上で書いたものをコンパイルすると,出力は次のようになってしまいます。

 

In 1, the omission of the plural morpheme makes the sentence ungrammatical.

1 * I should have finished these thing by yesterday.

(1)のようにしたいときは,タグをさらに丸括弧で囲んで,(<$n:ex:first>)としなくてはいけません。これはそこまで厄介ではありませんが,少し厄介なのは,同じ番号を繰り返して,(1a), (1b)のようなものを作ることが出来ない点です(注1)。その場合,exの部分を別のキーワードに設定して,(<$n:ex1:first>),(<$n:ex2:first>)のようにすれば,それぞれ初出なら1が出てきますから,そこにaやbを自分で書き足して,(<$n:ex1:first>a),(<$n:ex2:first>b)とすれば,(1a),(1b),のような連番作成はおそらく可能でしょう。これを使うことの問題は,そもそも例文の「グループ」という概念を壊すことになってしまうので,どのキーワードを使えば何の数字が出てくるかを自分で把握しながらタグを使わないといけない点です。これは少しめんどくさそうです。もちろん,アルファベットの見出しを用いないですべて連番にすることはできるといえばできるので,そちらでも良いかもしれません(そもそも私自身数字とアルファベットの使い分けに明確なルールを持っているわけでもないです)。

ということで,この連番作成機能は役に立ちそうなので,メモとして書いておきました。今週指導教官に初稿を提出することになっているので,ラストスパート頑張ります。

なにをゆう たむらゆう

おしまい。

 

追記(注1):今考えれば,同じタグを使って(<$n:ex1:first>a),(<$n:ex1:first>b)とかやればいいだけでした…

Excelで英文中の特定の単語までの語数を数える

自分の作業用のメモです。

博論の進捗が遅れすぎていていよいよやばくなってきました。そこで,ちょっとでも博論を進めるための作業をやっていて,プログラムの修正も済んだので,あとはプログラムに刺激文を流し込むだけになりました。そこでちょっとした問題発生。あまり詳しいことを書くとネタバレするので書けませんが,プログラムの中で,ある特定の単語数になった場合に処理をするというようなことをやっています。それが刺激文ごとに異なるので,配列変数にその単語数を指定しているのですが,100ちょいある刺激文をいちいち目視して何語目かを数えるとかやってられません。ちなみに刺激文自体はExcelファイルにまとめています。こんな感じで。

ブログ記事用_20160811

Excel上で単語数を数える関数は,ウェブ上で情報が見つけられます。いつも使っているのはこちら。

エクセル関数を利用して文字列中の英単語の数を数える

英文の中の特定の単語までの語数を数えるというのは,分解して考えてみればいくつかの作業に分けて考えることができます。

  1. 英文の中にある特定の単語をみつける
  2. 特定の単語の前にある文字列を抽出する
  3. 特定の単語の前にある文字列から単語の数を数える

という感じです。英文に含まれる単語数を数えるのは,上の3つのうちで3の作業になります。この単語数を数えるのはどういう原理かというと,つまりはスペースの数を数えるということです。英文にはスペース区切りで単語が入っているわけですから,スペースの数を数えて,それに1を加えた数が単語の数というわけです。

1は,特定の単語,つまり特定の文字列を探すということです。FIND関数を使うと,指定した文字列が現れる位置を探してくれます。そして,2の文字列の抽出にはMID関数が使えます。MID関数は,文字列の任意の位置から指定した文字数を抽出してくれます。このFIND関数とMID関数を組み合わせれば,特定の単語を見つけて,それより前にある文字列を抽出することができるわけです(参考サイト)。例えば,さきほどのExcelでD2に入っていた

The boy saw the cute girls in the park last week.

という文の中で,parkがtarget語であるとしましょう。そして,target語はF2に入れているとします。すると

=MID(D2,1,FIND(F2,D2,1)-1)

とすれば,parkの前までの単語をすべて抽出できます。

ブログ記事用2_20160811

FIND関数で指定した位置からだとその単語の先頭も含まれてしまうので,-1をしています。これで,1と2のステップができました。あとは,この抽出した文字列に含まれる単語の数を数えれば良いということになります。

単語の数を数えるには,引き算を使います。先ほど,スペースの数を数えれば良いと言いましたが,スペースを数えるには,スペースありの文字数(≠単語数)から,スペースなしの文字数(≠単語数)を引けば求めることができます。文字列を数えるのはLEN関数を使い,スペースの削除はSUBSTITUTE関数を使います(上記サイト参照)。先ほどの画像の中でG2に入っているセルの文字列を使うとすると,

=(LEN(G2)-LEN(SUBSTITUTE(G2,” “,””)))

とすれば単語数がカウントできます。ここで注意が必要なのは,通常英文の単語数をカウントする場合は+1をしないといけないという点です。例えば,次のような英文を考えてみます。

He is always shy.

普通英文はピリオドで終わっていて,その後ろにはスペースはありません。よって,単語の数よりスペースの数は1少ないことになります。ですから,数えたスペースに1を足すことで,単語の数を求めることができます。しかしながら,さきほど文字列抽出したときには,ある文字列(単語)の直前までの文字列を抽出しました。指定した文字列は単語であり,英文では単語の前には必ずスペースがあります。つまり,G2に入っている文字列の”the”のうしろには実はスペースが入っています。このため,単語の数とスペースの数が一致しており,最後に+1をする必要がなくなっているというわけです。

ここまでで,target語であるparkの前にある単語の数を求めることができました。もともとの目的は,「parkはその文の中で何語目なのか」でしたから,実は結局のところ,先ほどのものに最終的には+1をすることになります。この+1は,英文中に含まれる単語の数を数えるためにするものではなく,その次の単語(1語後ろ)が全体の何語目かを知りたいから行うということには注意が必要です。

ということで,賛否両論おありかと思いますが,私はガンガン埋め込み派なので,G2というセルに一旦吐き出してから計算するのではなく,LEN関数の中に,MIDとFINDを埋め込んでしまいます。

=(LEN(MID(D2,1,FIND(F2,D2,1)-1))-LEN(SUBSTITUTE(MID(D2,1,FIND(F2,D2,1)-1),” “,””)))+1

どん。

こうすれば,あとはF列にtargetとなる単語を刺激文の数だけ入力してさえあれば,「見つける->抽出する->数える」という3つのステップを表現した上の関数を別の列に縦にコピーするだけで自動的にtarget語の出現位置を計算することができるというわけです。

この方法がわかったおかげで目を細めながら単語の数をひたすら数えるという土方作業をやらずに済みました。ただし博論完成までは程遠いです(白目

なにをゆう たむらゆう

おしまい。

 

 

 

“Mac向け文章作成エディタ「Scrivener」のiPhone・iPadアプリがついに登場! | iTea4.0”

約1年ほど前から,論文執筆はMacでScrivenerを使っています。MBAはほとんど常に持ち歩きますから,研究室以外の場所でもMBAでガリガリ書けるのでかなり気に入っています。そのScrivenerのiOS版が出たみたいですね。MBAを買ってからはiPadは基本的にPDFの論文を読んだりKindleアプリで本読んだり,Duetでサブディスプレイとして使ったりという使い方をしています。そして先日,4,5年前アメリカにいた時に買って,MBAを2013年末に買うまで重宝していた折りたたみ式キーボードが壊れたので,いよいよiPadで物書きはしなくなるなぁと思っていたところです。そこにきてこのiOS版Scrivenerの登場。キーボードがあればiPadの方が軽くて気軽に持ち運べるので,ScrivenerのiOS版をかなり待ち望みにしていた人も多かったのではと思います。Mac版持ってたらFreeとかだったらよかったんですが,iOS版も2400円払って購入しないといけないんですね。そう考えると別にいままで通りMBAで執筆作業ってことでいいのかなと思っています。キーボードも買わないといけませんし。悩みます。

なにをゆう たむらゆう。

おしまい。


Macで人気の文章作成エディタ「Scrivener」のiPhone・iPadアプリが、2016年7月20日に「App Store」でリリースされました。

情報源: Mac向け文章作成エディタ「Scrivener」のiPhone・iPadアプリがついに登場! | iTea4.0

”Evernoteが無料ユーザーに厳しい変更、同期可能な端末を2台に制限”

数年前からEvernoteを愛用しています。使い方は多岐にわたっていて,単なるメモ書きだけにとどまらず,大事な書類をスキャンして放り込んだり,気になるウェブページをガンガンクリッピングしたりしています。研究のネタを書き留めたりもしますし,論文をいつどこに投稿するかの予定を書いておいたり,また実際に投稿した論文の審査過程をメモしてもいます。例えば,いつ投稿して,査読結果が来たのはいつで,修正原稿の〆切はいつで,手元に実物が届いたのはいつか,など。あとは,1度学会の年会費を払ったかどうかを確認できずに冷や汗かいたことがあるので,最近は振り込んだらその領収書をEvernoteに保存するようにしています。こういう小さい紙をスキャンするのに便利なのが,scannableというアプリで、かなり気に入っています。このアプリで書類や領収書などの写真を撮れば自動的にPDF化してくれて,そのままEvernoteに保存することができます(写真として保存することもできます)。scansnapがあれば必要ないかもしれませんが,いつでも気づいたときにパシャりとできて便利です。

さて,そんな便利なEvernoteですが,私のような使い方であれば基本的に無料のベーシックプランで問題ありませんでした。容量の制限が気になったこともありませんし,オフラインでノート共有できないときも最悪iPhoneがあります。どうしてもiPadやMBAで見たいときはデザリングすればいいですし。ところが,どうやらベーシックプランで利用する端末の制限がかかってしまうようなのです。私は現在ウェブアプリの他にiPhone,iPad,MBAでEvernoteを同期しており,2台までの制限だとどれか一つを切り捨てなければいけないことになります。MBAを買ってからは基本的に常にMBAを持ち歩いて作業しているので,iPadの利用頻度は以前に比べるとかなり減ってきています。そう考えると,iPadでは利用せずにiPhoneとMBAだけですませるということも考えられます。

アップグレードするとなると,容量が増えてオフラインでも使えるプラス版で年間3100円、さらにPDF内の文字検索にも対応するプレミアム会員で年間5200円になります。いままでベーシック版の機能だけで事足りていた私からすると,利用端末の制限を解除したいというだけで年間3100円も支払うべきなのか非常に悩ましいところです。

さてどうしましょう。もう少し悩みます。

なにをゆう  たむらゆう

おしまい。


Evernoteは6月29日、価格プランを改定すると発表しました。改定のポイントは2点。無料ユーザー(ベーシックプラン)がノートを同期できる端末を最大2つに制限することと、有料プラン(プラスプラン、プレミアムプラン)を大幅に値上げすることです。価格改定は2016年8月15日以降の更新日から適用されます。

情報源: Evernoteが無料ユーザーに厳しい変更、同期可能な端末を2台に制限 有料プランも大幅値上げ | アプリオ

遠くからライフルで撃つか,接近戦でナイフで仕留めるか。

別にゲームの話ではありません。戦争の話でもありません。ただし,私達の日々の仕事は戦闘です。敵は?そうトドです。日々どのようにトドを狩るか。狩っても狩っても湧いてくるトドをどうしたら効率的にたおせるのか。それが人生です。トドの狩り方は人それぞれでしょうから,この狩り方が良いという絶対の方法もないでしょう。遠くからライフルで撃つもよし,放置してたから接近戦になりあえて近くまでおびき寄せてからナイフで仕留めるもよし。要するに,トドに殺られる前にやっつければよいというわけです。

さて,私の狩り方はどうか。振り返ってみました。私は,他の多くの方と同じように〆切がなければなにもしないクズ野郎です。ですから,いつも視界に入っているトドを見て見ぬフリをして,そろそろやばいかもという段階になって必死にナイフで戦ってなんとか一命を取り留めるということをしてきました。そして接近戦闘の次の日は使い物にならずHPの回復に費やすということも多々有りました。しかし,本当はライフルで華麗に狙い撃ちしたいのです。身の危険がより少ない段階でトドを仕留めておきたいのです。口頭発表の申し込みの日にはスライドが完成していて,論文の募集が始まった日に原稿を投稿してしまうそして落ちる,そういう仕事の出来る人になりたいのです。それには,トドを把握すること,どのトドを先に狙い撃つか,計画をしっかり立てることが重要ですよね。当たり前の話です。つまり,トドの管理です。私は今まで,iPhoneのリマインダーやGoogleのカレンダーのTo doリストを使っていました。iPhoneのリマインダーは,そもそもそのリマインダーをいつもチェックするというクセがなく,僕にはあまり合いませんでした。昨年度までは使っていましたが,名古屋に来てからはGoogleカレンダーのTo doリストにしていました。基本的にGoogleカレンダーはいつも見ているので,そこにTo doリストがあればいつもTo doを気にしながら作業ができるからです。ただし,ちょっと物足りなさを感じていたのはカテゴリ分けやサブタスクの設定ができないことでした。プライベートのトドや,仕事のトドがごっちゃになってしまい,さらには「論文投稿」というタスクの下に,「第1稿完了」や「英文校閲に出す」などのサブタスクをつけて,各タスク間の階層関係をつけることもできませんでした。そしてつい最近こんなことを言われました。

うちのゼミはトドの早狩りが売りなのに,お前はいつもギリギリ

……

てへぺろ☆  ★
*   ___ +
★  + /)⌒ ⌒\
+ _ヘ//(●) < ヽ
/ヒノノ _二⊃(_人_)  |
< +  ヽノ ノ
/ ̄\) *    \

というわけで,いよいよ私は接近戦型社畜RA戦士から,遠距離狙撃型社畜RA戦士にならなくてはいけなくなりました。額にもう1つの目がある感じで撃っちゃうよと。1キロ先のトドも撃っちゃうよと。そこでevernoteを漁っていたらこんな記事を見つけました。

米Lifehacker編集部のiPhoneのイチオシToDoアプリは『Wunderlist』

http://www.lifehacker.jp/2011/10/111027iphonewunderlist.html

無料のTo doリストで人気なのはRemember the Milkかもしれません。名前はよく聞いたことがあります。でもWunderlistはデザインもなんかスタイリッシュでかっこいいのでそっちにしました。というかGoogleカレンダーとの連携やウェブ版があって窓機からでも見れるというのもRTMでもできますからね。

Screen Shot 2014-11-28 at 23.19.47

Mac版のホームはこんなかんじです。背景は無料版でも20種類から選ぶことができます。左側でカテゴリ分けをしています。とりあえず今は試しにプライベート,食料品の買い物,仕事,ほしい物リストという感じです。

食料品の買い物というカテゴリを開くと,こんなかんじ。

Screen Shot 2014-11-28 at 23.44.48

一番上の黒っぽいところに新しいのをどんどん書いていきます。肉類というところを開くと,

Screen Shot 2014-11-28 at 23.21.43

こんな感じで何を買うかというのを入力することができるわけですね。ここにサブタスクを突っ込む感じです。順番は後で入れ替え可能です。due dateのところで日付を設定したり,その下でリマインダーの登録も出来ます。Todoリストは名前順で並び替えたり。まぁまだ使い始めたばかりなので,実際の使用感とかはまたレビューしようかなと思います。そういえば,今日の授業でこんなTED動画を扱いました。

Keep your goals to yourself

目標を決めて何かをするときは,それを人には言わないほうがよいそうです。人にいうことで満足感を得てしまい,努力しなくなってしまうとか。こんなところで遠距離狙撃するぞ!なんて言ってる僕はもうだめですね…

なにをゆう たむらゆう

おしまい