裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

行名付き下三角行列を読む関数

2011年07月13日 | ブログラミング

read.lower.tri <- function(file="", symmetric=FALSE)
{
    elements <- scan(file=file, what="")
    m <- length(elements)
    n <- floor((sqrt(9+8*m)-3)/2)
    if (m != n*(n+1)/2+n) {
        stop("wrong number of elements (cannot make square matrix)")
    }
    x <- diag(n)
    pos <- cumsum(1:n)
    x[upper.tri(x, diag=TRUE)] <- as.numeric(elements[-pos])
    colnames(x) <- rownames(x) <- elements[pos]
    if (symmetric) {
        x <- x+t(x)
        diag(x) <- diag(x)/2
        return(x)
    }
    else {
        return(t(x))
    }
}
( x <- read.lower.tri(symmetric=TRUE) )
SCAO   0.00
AOPR   0.91  0.00
ARPO   0.96  0.85  0.00
YOSA   0.86  0.94  0.94  0.00
ROAY   0.89  0.90  0.91  0.83  0.00
SORA   0.97  0.99  0.98  0.92  0.98  0.00
BJAO   0.90  0.91  0.95  0.92  0.89  0.85  0.00


上のような,行の名前を持つ下三角行列(対角成分を含む)を入力する関数を書いた。
第1引数に,ファイルから入力するならファイル名。デフォルトではコンソールから読む。コンソールから読むときは,関数の入力に続いてプロンプトに従って入力(どこかからコピーして,コンソールにペースト)する。空行で入力終了。
対称行列にしたければ,symmetric=TRUE にする。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村