mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2024年04月 来月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

2020年10月07日(水) [n年日記]

#1 getopt(1) in R

Rにも ライブラリ で getopt(1) があるようですが, 元のgetoptと違い, % foo.R --flag=xxx file1 file2 の file1 file2 のように, オプションの引数でない引数を許さない(!)ようなので, 簡単なラッパーを書いてみました。
使い方は中の main () にある通りですが, 元のように byrow=T のように余計なこと を書く必要がなく,
opts <- getopts ( c(
    "alpha",  "a", 1, "double",
    "iters",  "N", 2, "integer",
    "output", "o", 2, "character",
    "help",   "h", 0, "logical"
), usage, 2)
のように書くだけで使えます。&, opts にある名残り opt$ARGS (上の一般引数に 対応しようとした名残りだと思われます) を消し, 指定されなかったオプションには NAを代入するので, opt$foo のようにそのまま他に引数として渡すことができます。
最後の2は一般引数の数で, さすがにオプションと混じった場合には使えませんが, 一般引数は最初に置いても最後に置いてもよいようにしておきました。

#!/usr/local/bin/Rscript
#
#    opts.R
#    for easy use of getopt(1).
#    $Id: opts.R,v 1.5 2020/10/07 00:21:00 daichi Exp $
#
library("getopt")

getopts <- function (spec, usage, n, ...)
{
    res <- list()
    tokens <- commandArgs (T)
    
    if (length(tokens) < n) {
        usage ()
    }

    if (substr(tokens[1], 1, 1) == "-") {
        res$args <- tail (tokens, n)
        res$opts <- getopt (matrix (spec, byrow=T, ncol=4),
                            head (tokens, -n), ...)
    } else {
        res$args <- head (tokens, n)
        res$opts <- getopt (matrix (spec, byrow=T, ncol=4),
                            tail (tokens, -n), ...)
    }

    # fill unused options by NA
    names <- spec [seq(1,length(spec),by=4)]
    for (name in names) {
        if (is.null(res$opts[[name]])) {
            res$opts[[name]] <- NA
        }
        res$opts$ARGS <- NULL
    }

    res
}

main <- function ()
{
    usage <- function ()
    {
        cat ('usage: % opts.R --iter=iters --output=file train model\n')
        quit ()
    }

    opts <- getopts ( c(
        "alpha",  "a", 1, "double",
        "iters",  "N", 2, "integer",
        "output", "o", 2, "character",
        "help",   "h", 0, "logical"
        ), usage, 2)

    if (!is.na(opts$opts$help)) {
        usage ()
    }

    print (opts$args)
    print (opts$opts)

}

if (!interactive() & sys.nframe() == 0) {
    main ()
}

2010年10月07日(木) [n年日記]

#1 Journal

CS研では, 来年から新しく を購読することになったそうです。グレート。
最初の2つは石黒君のリクエストだそうで, Biometrikaは僕のリクエストです。 僕もASをリクエストした方がいいかと思ったのですが, マニアックだろうか..と 思って言わなかったので, 石黒君がリクエストしてくれて有り難い。
誰が研究所にいるかが, こういう場合には明確に出るような気がします。


2007年10月07日() [n年日記]

#1 jroff(3) && 計算機古文書

さらに引っ張る。(というか, 裏で某翻訳が全然終わらないので, 一生懸命頑張っているわけですが..。)

家に帰って junet 時代のドキュメントを眺めていたら, 吉田茂樹さん *1 が書かれた「msマクロを使用した文書の書き方」 という文書があるのを発見した。(1988年)
これは今探すと, http://ftp.riken.jp/pub/misc/Japan/JUNET-DB/troff/ などに置いてある模様。
この中から必要なファイルを取ってきて make を実行すると, ms.tut.ms が処理 されて文書が得られます。結果を ps->pdf 化したものが こちら。 (pdf) これは日本語でmsの各種マクロの意味が解説されており, 特殊文字の一覧や 必要になる troff コマンドの解説も含まれているので, troff についてはかなり役に 立ちそうです。

言うまでもないですが, roff,tbl,eqn 等については "The Unix Super Text"(下)の48章に 簡単な解説が含まれています。 *2
他に, me マクロパッケージについては, /usr/share/doc/groff-1.18.1/ の下に meintro.ms が置いてあって(私の環境の場合), % troff -me -Tps meintro.ms でタイプセット して読めるようです。me の方が, 現代のLaTeXの文書に近いような感じです。
また, メモ代わりですが, ベル研のテクニカルレポートのページ http://cm.bell-labs.com/cm/cs/cstr.html にも各種文書が集まっている模様。

上の junet の文書は前に はらださん に教えてもらったものですが, 僕もそれまで聞いたことがなかったし, かなり知られていないような気がします。 「コアラ大将のTCP/IP入門」とか昔は有名だったらしいですが, 今も役に立つかは 微妙。
「おヒマならMHを使ってよネ!」は このへん に置いてありました。w


*1: 今は iamas におられるらしい。Unix Magazine Classic+DVD を買ったら, 所属に 日本語で「国際情報科学芸術アカデミー」と書かれていて, 一体何だろうと 思ってしまった。
*2: もちろん, ここで紹介した文書の方が詳しい。

#2 圧縮

増井さんのmixi日記の 「圧縮文法」のエントリ を読んでワラタ。

言語モデルでは, 一般に文頭と文末に特殊な文字があると考えるので, 途中の文字の省略も含めて, 言語モデルでデコードしてやると高確率で元に戻せる のではないかと思う。(追加と違って本質的に情報が落ちているので, 確実な復元は 無理ですが..。)
ずっと前に書いた 似非中国語化 ではないですが, 「常考」とか「感感俺俺」とか, 実際に省略が起きている例は あるかもしれない。
「石こは無か」って何だろう, と思っていたら, 突如 「流石にこれは無理か」の省略だとわかった。人間恐るべし。(笑)


3 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project