Rでヒアドキュメント的な何かを実現する、たったふたつの冴えたやりかた

出来心でコメントしてしまったのだけど、ダイアリーの方でも少し反応してみる。そんな面倒なことしなくても、Rはちゃんと直感的なインターフェイスを用意してくれているよ!というお話。
マニュアルによると、read.csv()はファイル名、またはコネクション*1が通るようです。

  • the name of the file which the data are to be read from
  • file can be a readable connection

コネクションが通るということは・・・

などなど、何でも通ってしまいます。
問題の、こういうデータをdata.frameとして読み込みたい時は、クリップボード経由かテキストコネクションとして読み込むと簡単かも。

hatiroku <- "id,sex
syou6162,male
Hash,male
kaeru_san,female
suztomo,male
kuroneko,female"

1. クリップボード

マニュアルの"connetoins"の項目にはこのような記述があります。

For file the description is either a path to the file to be opened or a complete URL, or "" (the default) or "stdin" or "clipboard" (see below).

ファイル名に"clipboard"を指定すると、クリップボードの読み書きが可能になります。なので・・・カンマ区切りのデータをクリップボードにコピーして、それを直接読み取ることができます。

> read.csv("clipboard")
         id    sex
1  syou6162   male
2      Hash   male
3 kaeru_san female
4   suztomo   male
5  kuroneko female

あまりにもお手軽なので、最近はデータの受け渡しをクリップボードでやることがほとんどです。

2. テキストコネクション

あらかじめRの文字列としてデータが用意されている場合を考えます。普通に文字列を入力するとエラーになってしまうので、テキストコネクションに変換します。

> hatiroku <- "id,sex
+ syou6162,male
+ Hash,male
+ kaeru_san,female
+ suztomo,male
+ kuroneko,female"
> read.csv(textConnection(hatiroku))
         id    sex
1  syou6162   male
2      Hash   male
3 kaeru_san female
4   suztomo   male
5  kuroneko female

他の言語ではこうは行かない。さすがR。

*1:いわゆるC++Javaの「ストリーム」に近いイメージだと思ってます