クリップボードに取り込んだ内容を R に取り込む Last modified: Jan 05, 2007
目的
コピー,カットによりクリップボードに取り込んだ内容を R に取り込む関数。
以下は,Macintoshの場合。Windows の場合は少し簡単になる。
作られるオブジェクトは "fixed" と "matrix" クラスを持つので,
print 関数を引用するときには print.fixed 関数が使われる。
なお,データフレームとして取り込む場合には,read.table(stdin(), header=TRUE)の方がよいかもしれない。
使用法
object <- fixed()
引数
なし
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/fixed.R", encoding="euc-jp")
# コピー,カットによりクリップボードに取り込んだ内容を scan により R に取り込む
fixed <- function()
{
x <- scan("", sep="\n", what="", quiet=TRUE, strip.white=TRUE) # 一行ずつ,前後の空白をはぎ取った文字列を読む
n <- length(x) # 何行読んだか
res <- sapply(x, function(x) strsplit(x, "([\t]| +)")) # 空白類を区切り文字として切り取る
len <- sapply(res, length) # 何項目読んだか
if (len[1] == len[2]-1) { # 一行目と二行目の項目数が違うとき,
res[[1]] <- append("", res[[1]]) # 一行目の最初の項目として空を挿入する
len[1] <- len[1]+1 # 1 項目増える
}
max.len <- max(len) # 最大項目数
res2 <- matrix("", n, max.len) # 行列にする
for (i in 1:n) {
res2[i,] <- c(unlist(res[i]), rep("", max.len-len[i])) # 一行の残りの項目は空とする
}
class(res2) <- c("fixed", "matrix") # fixed クラスにする(print.fixed を使うために)
return(res2)
}
使用例
以下の3行をコピーしてクリップボードに入れる
-1.0 0.91 0.637 -0.1823 1.08874
-1.8 2.52 -1.169 0.0323 0.56543
-1.3 1.59 0.174 -1.1349 2.02057
次に,以下を実行
> y <- fixed()
プロンプトが出たら,ペースト。最後にリターンキー
> y
実行例
> y <- fixed()
1: -1.0 0.91 0.637 -0.1823 1.08874
2: -1.8 2.52 -1.169 0.0323 0.56543
3: -1.3 1.59 0.174 -1.1349 2.02057
4:
Read 3 items
> y # 作られるオブジェクトは "fixed" と "matrix" クラスを持つ
-1 0.91 0.637 -0.1823 1.08874
-1.8 2.52 -1.169 0.0323 0.56543
-1.3 1.59 0.174 -1.1349 2.02057
表形式のデータならば,入力元を stdin() として,read.table 関数を使うともっと柔軟な取り扱いができる。ヘッダが付いているような場合には最適であろう。
> x <- read.table(stdin(), header=FALSE)
0: -1.0 0.91 0.637 -0.1823 1.08874
1: -1.8 2.52 -1.169 0.0323 0.56543
2: -1.3 1.59 0.174 -1.1349 2.02057
3:
> x
V1 V2 V3 V4 V5
1 -1.0 0.91 0.637 -0.1823 1.08874
2 -1.8 2.52 -1.169 0.0323 0.56543
3 -1.3 1.59 0.174 -1.1349 2.02057
直前のページへ戻る
E-mail to Shigenobu AOKI