クリップボードに取り込んだ内容を 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

Made with Macintosh