裏 RjpWiki

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

3桁区切りの数値表現

2011年01月28日 | ブログラミング
http://d.hatena.ne.jp/isseing333/20110126/1296022021 の関数を書く
comma <- function(n)
{
	out <- function(n)
	{
		if (n < 1000) return(as.character(n))
		else sprintf("%s,%03s", out(n %/% 1000), n %% 1000)
	}
	s <- unlist(strsplit(as.character(n), "\\."))
	return(sprintf("%s%s%s",
	       ifelse(n < 0, "-", ""),
	       out(abs(as.numeric(s[[1]]))),
	       ifelse(length(s) == 2, sprintf(".%s", s[[2]]), "")))
}
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

カッケー・プログラム

2011年01月28日 | ブログラミング
yBin$BMI <- ifelse(25 <= y$BMI, 1, 0)

は,単に

yBin$BMI <- 25 <= y$BMI

でよい。TRUE/FALSE は用途により 1/0 に変更して使われるので気にしなくて良いが,あえて TRUE/FALSE  ではなく 1/0 にしたいなら

yBin$BMI <- (25 <= y$BMI)+0

後者は100倍くらい速い。まあ,100000 回もやって 0.1 秒が 0.001 秒になるという,どうでもよいレベルの話ではあるが,プログラムが格好良いかどうかには影響を及ぼすだろう。

> x <- rnorm(100000)

> system.time(y1 <- ifelse(x < 0, 1, 0))
   ユーザ   システム       経過 
     0.101      0.007      0.106

> system.time(y2 <- x < 0)
   ユーザ   システム       経過 
     0.001      0.000      0.000

> system.time(y3 <- (x < 0)+0)
   ユーザ   システム       経過 
     0.001      0.000      0.002

> all(y1 == y2)
[1] TRUE

> all(y1 == y3)
[1] TRUE

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

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

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