行列やデータフレームをコンソール画面に表示し,それをカット&ペーストで他のアプリケーションに持っていくとき,R の標準の出力では行番号や列番号がついてしまって不都合な場合がある。
例
> dat <- matrix(1:12, byrow=TRUE, ncol=3)
> dat
[,1] [,2] [,3]
[1,] 1 2 3 # 4 行 3 列の本体部分だけがほしいのに
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
そのようなときに,次に示すような関数を作っておくと便利かもしれない。data.list 関数の定義
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/data_list.R", encoding="euc-jp")
# 行名(行番号)なしでデータフレーム(行列)を表示する
data.list <- function(d) # データフレームまたは行列
{
cat(paste(t(d), c(rep("\t", ncol(d)-1), "\n")), sep="")
}
data.list2 関数の定義
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/data_list2.R", encoding="euc-jp")
# 行名(行番号)なしでデータフレーム(行列)を表示する
data.list2 <- function(d) # データフレームまたは行列
{
invisible(apply(d, 1, function(i) cat(paste(i, c(rep("\t", length(i)-1), "\n")))))
}
data.list3 関数の定義
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/data_list3.R", encoding="euc-jp")
# 行名(行番号)なしでデータフレーム(行列)を表示する
data.list3 <- function( d, # データフレームまたは行列
num = FALSE) # 行番号をつけるかどうか
{
nv <- ncol(d)
n <- nrow(d)
for (i in 1:n) {
if (num) cat(i, "\t")
for (j in 1:(nv-1)) {
cat(d[i, j], "\t")
}
cat(d[i, j+1], "\n")
}
}
例
> data.list(dat)
1 2 3
4 5 6
7 8 9
10 11 12
> data.list3(dat, num=TRUE) # num=TRUE を指定すると,行番号をつけて表示する
1 1 2 3
2 4 5 6
3 7 8 9
4 10 11 12
> dat2 <- data.frame(dat) # データフレームの場合にも同様な表示になる
> dat2
X1 X2 X3
1 1 2 3
2 4 5 6
3 7 8 9
4 10 11 12
> data.list(dat2)
1 2 3
4 5 6
7 8 9
10 11 12
> data.list2(dat)
1 2 3
4 5 6
7 8 9
10 11 12
data.list2 と data.list3 関数は,実数値の場合には全桁が表示される。また,一行に収まらない場合には複数行にわたるが,実際には改行コードは行末にしか入っていないので,該当部分をコピーして Excel にペーストすると,ちゃんとセルに数値が入る。