Rでクリップボードからデータを読み込む - 井関龍太のページ

ホーム   編集 凍結 差分 バックアップ 添付 コピー 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Rでクリップボードからデータを読み込む

Last-modified: 2015年12月06日 (日) 15:27:24 (1080d)
Top > Rでクリップボードからデータを読み込む

クリップボードからのデータの読み込み

Rでデータを読み込むのにはいろいろな方法があります。
最もよく紹介されているのは,テキストファイルやCSVファイル,Excelファイルなどのファイルを直接読み込む方法ではないかと思います。
しかし,探索的に分析を進めているときにはクリップボードからデータを読みたいことがあると思います(特に,ファイルの一部分だけを取り込みたいときなど)。

そんなときには,クリップボードを読み込み元に指定してread.table関数を使うのが手軽な方法でしょう。
ところが,このクリップボードからの読み込み方法は,OSによって指定方法が違っているのです。

Windowsの場合には,以下のようになります。

read.table("clipboard")

“クリップボード”を指定するというストレートな方法です。
しかし,MacやLinuxだとクリップボードのしくみが違っているので,この方法は使えません。
Macの場合には,以下のように指定します。

read.table(pipe("pbpaste"))

さらに,Linuxの場合には,ウィンドウシステムのクリップボードとアプリケーションのクリップボードが違っているので,簡単にはRに読み込めません。
xclipというコマンドを使えば何とかなるのですが,いちいちこのコマンドを呼び出してから読み込みの命令を実行するのは面倒です。

そこで,OSにかかわらず同じ書式でクリップボードからデータを読み込むための関数を作成しました。
Linuxを使っている方,複数のOSを行き来することが多い方に役立つのではないかと思います。
(ただし,最近のUbuntu上のRでは,read.table("clipboard")で読み込めるようになったようなので,以下の関数は特に必要ないかもしれません。)

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をインストールしている必要がある)
		system("xclip -o | xclip -sel primary")
		outboard <- "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-get install xclip
TrackBack(0) | 外部リンク元 | このエントリーをはてなブックマークに追加