目的 コピー,カットによりクリップボードに取り込んだ内容を 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