Rでクリップボードからデータを読み込む
クリップボードからのデータの読み込み†
Rでデータを読み込むのにはいろいろな方法があります。
最もよく紹介されているのは,テキストファイルやCSVファイル,Excelファイルなどのファイルを直接読み込む方法ではないかと思います。
しかし,探索的に分析を進めているときにはクリップボードからデータを読みたいことがあると思います(特に,ファイルの一部分だけを取り込みたいときなど)。
フォーマットがよくわからなくてなぜか読み込めないファイルでも,クリップボード経由ならタブ区切りテキストとして読み込めることがあります(sep = "\t"を指定すれば)。
そうしたときには,クリップボードを読み込み元に指定してread.table関数を使うのが手軽な方法でしょう。
ところが,このクリップボードからの読み込み方法は,OSによって指定方法が違っているのです。
Windowsの場合には,以下のようになります。
read.table("clipboard")
“クリップボード”を指定するというストレートな方法です。
しかし,MacやLinuxだとクリップボードのしくみが違っているので,この方法は使えません。
Macの場合には,以下のように指定します。
read.table(pipe("pbpaste"))
さらに,Linuxの場合には,ウィンドウシステムのクリップボードとアプリケーションのクリップボードが違っているので,簡単にはRに読み込めません。
xclipというコマンドを使えば何とかなるのですが,いちいちこのコマンドを呼び出してから読み込みの命令を実行するのは面倒です。
そこで,OSにかかわらず同じ書式でクリップボードからデータを読み込むための関数を作成しました。
Linuxを使っている方,複数のOSを行き来することが多い方に役立つのではないかと思います。
read.clip関数†
以下のコードをコピー&ペーストして,テキストファイルとして保存してください。
Rの“ソース”から読み込むと関数として使えるようになります(anovakun 4.3.2以降ではファイルに同梱しています)。
# クリップボードの情報を読み込む関数 # read.tableのラッパー関数;read.tableの出力先以外のオプションをすべて指定できる # OSにかかわらず同じ書式で機能するようにしてある;ただし,LinuxはUbuntuでのみテストしており,xclipをインストールしていることを前提とする read.clip <- function(...){ # OSごとのクリップボードを出力先に指定 plat.info <- .Platform if(sum(grep("windows", plat.info)) != 0){# Windowsの場合 outboard <- "clipboard" }else if(sum(grep("mac", plat.info)) != 0){# Macの場合 outboard <- pipe("pbpaste") }else if(grep("linux", R.version$system) == 1){# Linxの場合(xclipをインストールしている必要がある) outboard <- pipe("xclip -o -selection clipboard") }else{# いずれのOSでもない場合 stop("Unknown operating system !!") } # read.table関数を実行 read.table(file = outboard, ...) }
この関数は,クリップボードに関する指定を行ない,read.table関数に情報を送るものです。
基本的に,read.table関数のオプションがそのまま使えるはずです。
例えば,headerを指定したい場合は以下のようにします。
read.clip(header = T)
Linuxで使用する場合には,予めxclipをインストールしておく必要があります。
xclipをインストールしないでこの関数を使おうとした場合には,以下のような警告が出ます。
sh: 1: xclip: not found sh: 1: xclip: not found 以下にエラー file(file, "rt") : コネクションを開くことができません 追加情報: 警告メッセージ: In file(file, "rt") : クリップボードを開くことができないか,中身がありません
警告が出た場合には,まずxclipをインストールしてください。
Ubuntuでは端末に以下のように入力することで簡単にインストールできます。
sudo apt install xclip