hiratake55 の作業メモ

R, Javascript, Python, Linux and Hadoop

R で 変数の名前と値をまとめて表示する Print 関数を作った

変数の名前と値をペアで表示するだけのデバッグ用関数。変数だけでなく、ベクトルや配列、文字列、関数、データフレームにも対応しています。
引数の数は可変長なので、いくつでも大丈夫です。

Print <- function(...){
 key <- as.list(substitute(list(...)))[-1L]
 val <- list(...)
 mapply(
  function(k, v){
   cat(k, "= ")
   if(!is.matrix(v) && (is.logical(v) || is.numeric(v) || is.complex(v) || is.character(v))){ cat(v, "\n") }
   else{ cat("\n"); print(v); cat("\n") }
  },  
  key, val)
 cat("\n")
}

使い方 その 1

基本的な使い方は、このようになります。

> a<-1; b<-2; c<-3; d<-4; # 4 つの変数
> Print(a, b, c, d)

a = 1
b = 2
c = 3
d = 4

使い方 その 2

引数の型がごちゃ混ぜでも大丈夫です。

> bool <- TRUE # 論理値
> num <- 1 # 整数
> cpl <- 1+1i; # 複素数
> str <- "Hello." # 文字列
> vec <- 1:10 # ベクトル
> mat <- matrix(c(1, 2, 3), 3, 2) # 2×3 の行列
> Print(bool, num, cpl, str, vec, mat, plot, iris)

bool = TRUE
num = 1
cpl = 1+1i
str = Hello.
vec = 1 2 3 4 5 6 7 8 9 10
mat =
     [,1] [,2]
[1,]    1    1
[2,]    2    2
[3,]    3    3

plot =
function (x, y, ...)
{
    if (is.function(x) && is.null(attr(x, "class"))) {
… 省略 …

iris =
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
… 省略 …

毎回 Print 関数を入力するのが面倒な人は .RProfile に書いておくと良いでしょう。


(追記 2010/02/01 22:00)
Twitter 経由で @syou6162 先生からアドバイスいただいたので、大幅に修正した。id:syou6162++