1 名前:132人目の素数さん mailto:sage [2011/01/09(日) 17:31:49 ] R は統計計算とグラフィックスのための言語・環境です。 統計計算で重宝するデータ型や、複数要素を処理する演算や関数、 解析結果を表示するグラフィックなど、多彩な機能を提供します。 ●関連サイト The R Project www.r-project.org/ RjpWiki www.okada.jp.org/RWiki/ リンク集 www.okada.jp.org/RWiki/?%A5%EA%A5%F3%A5%AF%BD%B8
296 名前:132人目の素数さん mailto:sage [2012/01/01(日) 23:50:07.45 ] ややこしいなあ。
297 名前:132人目の素数さん mailto:sage [2012/01/02(月) 01:26:00.73 ] >>296 これをややこしいと思う人は、 incase-sensitiveな文化に脳を冒されている人
298 名前:132人目の素数さん mailto:sage [2012/01/04(水) 14:54:08.36 ] >>295 Mac OS X版だと同一ファイルにリンクされてた。 /usr/bin/R -> /Library/Frameworks/R.framework/Resources/bin/R /usr/bin/r -> /Library/Frameworks/R.framework/Resources/bin/R でも大文字Rのほうが標準っぽいな。 >>297 case-insensitiveだな。
299 名前:132人目の素数さん mailto:sage [2012/01/04(水) 16:16:24.48 ] >>298 MacPorts版のMacOSX版(ややこしいな)だとどうだろう。
300 名前:132人目の素数さん mailto:sage [2012/01/10(火) 23:18:34.13 ] 簡単そうでなかなかできないので相談させてください。 > a <- matrix(1:9,3) > (b <- list(a,a)) [[1]] [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 [[2]] [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 こんなリストがあったとして、これを3次元array ,,1 [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 ,,2 [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 こんな感じに変換するにはどうすればよいですか? やりたいことは、b[1,1,]とかb[1,2,]とか、 リストの要素である行列を貫いて、行列の各セルの値(ベクトル)を取り出したいのです。 arrayであれば、例えばb[3,3,]でc(9,9)が取り出せるはず。
301 名前:132人目の素数さん mailto:sage [2012/01/11(水) 01:10:41.37 ] ## ベクトルまで分解するunlistを使うとできたっぽいけど期待されている答えではないかも、、 a <- matrix(data = 1:9, nrow = 3) (b <- list(a,a)) unlist(b) test.array <- array(data = unlist(b), dim = c(3,3,2)) test.array test.array[3,3,] ## ちなみに、リストのまま処理してはだめ? sapply(X = b, FUN = function(y) {y[3,3]})
302 名前:132人目の素数さん mailto:sage [2012/01/11(水) 01:53:23.83 ] >>301 多謝! listのままだとその先の操作に進みにくかったので、arrayを検討していました。 unlist()は盲点でした。ありがとうございます。 > res <- matrix(rep(list(NA),9),3) > class(res[1,1]) [1] "list" > for(i in 1:3){for(j in 1:3){res[i,j] <- list(test.array[i,j,])}} > res [,1] [,2] [,3] [1,] Integer,2 Integer,2 Integer,2 [2,] Integer,2 Integer,2 Integer,2 [3,] Integer,2 Integer,2 Integer,2 > unlist(res[2,2]) [1] 5 5 ばっちりです。各セルに元データのセルの値を集めることが出来ました。 本番のデータでやってみます。 > for(i in 1:3){for(j in 1:3){res[i,j] <- list(sapply(b,function(y){y[i,j]}))}} リストのままでも出来てしまいました。すみません。
303 名前:132人目の素数さん [2012/01/15(日) 00:10:57.15 ] CだとかRだとかのような1文字の名前ではサーチするのが難しい。
304 名前:132人目の素数さん [2012/01/15(日) 12:02:12.63 ] その程度しか検索単語が思い浮かばないようでは()難しい
305 名前:132人目の素数さん mailto:sage [2012/01/15(日) 19:09:49.95 ] >>303 まぁ r-project r-script r 統計 このあたりですね
306 名前:132人目の素数さん mailto:sage [2012/01/16(月) 12:50:23.28 ] >>303 まぁまずはRSiteSearch()だろ。 そんで、ttp://www.rseek.org/ とか。 最後に>>305 の検索語でgoogleを使えばいいんじゃない? ○○を実装したパッケージを探すなら、「cran ○○」で検索する。
307 名前:132人目の素数さん [2012/01/17(火) 00:15:09.67 ] すんません、正方行列AのA^{-1/2}ってどう計算すれば良いですかね?
308 名前:132人目の素数さん [2012/01/17(火) 12:46:55.11 ] >>307 言いたいことは、こういうこと? 正方行列Aが逆行列を持ち、A^{-1} の固有値が m,n なら、 A^{-1/2} = (A^{-1}+ mnI)/(m+n) 違ってたら、ごめん。
309 名前:308 [2012/01/17(火) 12:48:44.46 ] あ、違ってた。 A^{-1/2} の固有値が m,n なら、 A^{-1/2} = (A^{-1}+ mnI)/(m+n) かな。
310 名前:308 [2012/01/17(火) 20:39:11.48 ] >>307 >>308 ,309 が、しっちゃかめっちゃかだったので捲土重来を目指して… A^t 転置、A^* 複素共役 として、 A が、A^t* A = A A^t* を満たし、A のすべての固有値が正だったら、 (U^t*)U = I を満たす行列 U と対角行列 D を使って、 A = UDU^{-1} と書けるから、 A^{-1/2} = UD^{-1/2}U^{-1} (ただし、D^{-1/2} は、D の各対角成分d_{i,i}に対し、 D^{-1/2} の各対角成分 x_ {i,i} = 1/√d_{i,i} としたもの。) という理解であってるのかな。
311 名前:308 [2012/01/17(火) 22:19:59.38 ] >>307 R-Sources ttp://cse.naro.affrc.go.jp/takezawa/r-tips/r/20.html 見たけど、これで行けるんじゃね? > A <- matrix(c(1,2,0,3), 2, 2) > B <- eigen(A)$vectors %*% diag(1/sqrt(eigen(A)$values)) %*% solve(eigen(A)$vectors) > solve(A) [,1] [,2] [1,] 1.0000000 0.0000000 [2,] -0.6666667 0.3333333 > B %*% B [,1] [,2] [1,] 1.0000000 0.0000000 [2,] -0.6666667 0.3333333 > A %*% B %*% B [,1] [,2] [1,] 1.000000e+00 0 [2,] 2.217736e-16 1 最後のがキッチリ単位行列にならないのは、 丸め誤差の所為だから仕方ないと思われ。
312 名前:308 [2012/01/17(火) 22:26:17.13 ] > A <- matrix(c(3,2,0,3,4,1,0,2,3), 3, 3) > B <- eigen(A)$vectors %*% diag(1/sqrt(eigen(A)$values)) %*% solve(eigen(A)$vectors) > eigen(A)$values [1] 6.3722813 3.0000000 0.6277187 > solve(A) [,1] [,2] [,3] [1,] 0.8333333 -0.75 0.5 [2,] -0.5000000 0.75 -0.5 [3,] 0.1666667 -0.25 0.5 > B %*% B [,1] [,2] [,3] [1,] 0.8333333 -0.75 0.5 [2,] -0.5000000 0.75 -0.5 [3,] 0.1666667 -0.25 0.5
313 名前:132人目の素数さん mailto:sage [2012/01/18(水) 10:57:06.79 ] >>312 > A %*% B %*% B [,1] [,2] [1,] 1.000000e+00 0 [2,] 3.330669e-16 1 > zapsmall(A %*% B %*% B) [,1] [,2] [1,] 1 0 [2,] 0 1
314 名前:308 [2012/01/18(水) 12:32:51.26 ] >>312 おお、そんな関数があったとは。
315 名前:308 [2012/01/18(水) 12:33:01.61 ] >>313 おお、そんな関数があったとは。
316 名前:308 [2012/01/18(水) 22:59:15.60 ] >>314 おお、そんな関数があったとは。
317 名前:308 [2012/01/18(水) 22:59:44.42 ] >>315 おお、そんな関数があったとは。
318 名前:308 [2012/01/18(水) 23:01:26.21 ] >>316 おお、そんな関数があったとは。
319 名前:308 [2012/01/18(水) 23:08:57.17 ] >>317 おお、そんな関数があったとは。
320 名前:308 [2012/01/18(水) 23:35:40.76 ] >>318 おお、そんな関数があったとは。
321 名前:308 [2012/01/19(木) 08:20:42.49 ] >>319 おお、そんな関数があったとは。
322 名前:308 [2012/01/19(木) 08:22:06.35 ] >>320 おお、そんな関数があったとは。
323 名前:308 [2012/01/19(木) 08:23:29.36 ] >>321 おお、そんな関数があったとは。
324 名前:132人目の素数さん mailto:sage [2012/01/19(木) 08:24:58.31 ] >>312 おお、そんな関数があったとは。
325 名前:132人目の素数さん mailto:sage [2012/01/19(木) 08:25:39.88 ] >>313 おお、そんな関数があったとは。
326 名前:308 [2012/01/19(木) 08:26:49.60 ] >>322 おお、そんな関数があったとは。
327 名前:132人目の素数さん mailto:sage [2012/01/19(木) 16:46:26.30 ] >>323 おお、そんな関数があったとは。
328 名前:132人目の素数さん mailto:sage [2012/01/19(木) 18:16:15.47 ] >>313 おお、そんな関数があったとは。
329 名前:308 [2012/01/19(木) 19:21:49.25 ] >>312 おお、そんな関数があったとは。
330 名前:132人目の素数さん mailto:sage [2012/01/19(木) 21:24:53.73 ] >>305 あと、R sourceとかね。
331 名前:132人目の素数さん mailto:sage [2012/01/19(木) 21:40:30.51 ] >>330 おお、そんな関数があったとは。
332 名前:132人目の素数さん mailto:sage [2012/01/19(木) 22:15:43.34 ] >>330 おお、そんなsourceがあったとは。
333 名前:132人目の素数さん [2012/01/19(木) 22:16:42.63 ] >>330 おお、そんなsourceがあったとは。
334 名前:132人目の素数さん [2012/01/19(木) 22:17:29.69 ] >>330 おお、そんなsourceがあったとは。
335 名前:132人目の素数さん [2012/01/19(木) 22:18:01.01 ] >>330 おお、そんなsourceがあったとは。
336 名前:132人目の素数さん [2012/01/19(木) 22:18:19.65 ] >>330 おお、そんなsourceがあったとは。
337 名前:308 mailto:sage [2012/01/19(木) 22:19:02.38 ] >>330 おお、そんなsourceがあったとは。
338 名前:308 mailto:sage [2012/01/19(木) 22:19:42.03 ] >>330 おお、そんなsourceがあったとは。
339 名前:308 mailto:sage [2012/01/19(木) 22:20:11.53 ] >>330 おお、そんなsourceがあったとは。
340 名前:132人目の素数さん mailto:sage [2012/01/19(木) 23:14:29.36 ] おおそんウェールズだったとは。
341 名前:308 mailto:sage [2012/01/20(金) 04:32:17.58 ] おまえら、いい加減にしなさい。
342 名前:132人目の素数さん mailto:sage [2012/01/20(金) 05:22:51.54 ] おまえら、いい加減にしなさい。
343 名前:313 mailto:sage [2012/01/20(金) 20:36:44.68 ] スレが伸びていると思ったら、お前ら。。。 でも、実際の話、zapsmall()を知らないで、 条件分岐における数値型の同値の比較を どうやって今まで書いていたのだろうと不思議に思う。
344 名前:132人目の素数さん [2012/01/20(金) 20:42:23.02 ] >>307 こいつ自分で質問の意味わかってのかいな?
345 名前:132人目の素数さん [2012/01/20(金) 23:50:31.94 ] >>343 他の言語と同じように書いてたよ。
346 名前:132人目の素数さん [2012/01/20(金) 23:57:15.16 ] >>343 abs(x-y) < 10^-14 とか
347 名前:132人目の素数さん [2012/01/23(月) 09:35:12.79 ] 簡単なことですが質問させてください。 10*3の配列があり,1列目と2列目,1列目と3列目の計算し, 元の配列に戻したいばあい,どのように配列指定をしてやれば良いのでしょうか? たとえば x <- matrix(1:30, ncol=3) で, 4列目に x[,1]+x[,2] 5列目に x[,1]*x[,2] おそらく x <- matrix(x[,1]+x[,2], x[,1]*x[,3], ???????) で,「???????」を指定すればいいと思うのですが,,,, よろしくお願いします
348 名前:132人目の素数さん mailto:sage [2012/01/23(月) 09:52:39.90 ] >>347 > cbind(x,x[,1]+x[,2],x[,1]*x[,2]) [,1] [,2] [,3] [,4] [,5] [1,] 1 11 21 12 11 [2,] 2 12 22 14 24 [3,] 3 13 23 16 39 [4,] 4 14 24 18 56 [5,] 5 15 25 20 75 [6,] 6 16 26 22 96 [7,] 7 17 27 24 119 [8,] 8 18 28 26 144 [9,] 9 19 29 28 171 [10,] 10 20 30 30 200 こういうこと?
349 名前:347 [2012/01/23(月) 10:02:32.95 ] 早速ありがとうございます >348 matrix()を使わなければいけないと悩んでいた私が馬鹿でした。 matrizだと横展開にしかならず苦悩しておりました。
350 名前:348 mailto:sage [2012/01/23(月) 12:02:36.25 ] >>349 いや、cbind()かmatrix()かは好みの問題だと思うぞ。 > matrix(c(x,x[,1]+x[,2],x[,1]*x[,2]),ncol=5) [,1] [,2] [,3] [,4] [,5] [1,] 1 11 21 12 11 [2,] 2 12 22 14 24 [3,] 3 13 23 16 39 [4,] 4 14 24 18 56 [5,] 5 15 25 20 75 [6,] 6 16 26 22 96 [7,] 7 17 27 24 119 [8,] 8 18 28 26 144 [9,] 9 19 29 28 171 [10,] 10 20 30 30 200
351 名前:132人目の素数さん mailto:sage [2012/01/23(月) 13:13:39.14 ] RStudio最新版(0.94.110)はR-2.14以降も動作していますか? RStudioご利用の方いましたら、ご一報お願いします
352 名前:132人目の素数さん mailto:sage [2012/01/23(月) 13:28:06.82 ] >>351 $ dpkg -l rstudio r-base |tail -2 ii r-base 2.14.1-1oneiric0 GNU R statistical computation and graphics system ii rstudio 0.94.110 RStudio 問題なし。
353 名前:132人目の素数さん mailto:sage [2012/01/23(月) 18:42:28.25 ] Rjpwikiのヲチで申し訳ないが、 河童さんが、par(mfrow=c(2,1))を使わずに、layout(matrix(1:2, 2))を使う理由って何だろう。 layout()だとなんかいいことがあるのかな?
354 名前:308 mailto:sage [2012/01/23(月) 21:15:31.43 ] うん
355 名前:132人目の素数さん [2012/01/25(水) 18:23:35.62 ] スペースで区切られた文字列(数値のみ)で,空白をカウントして改行するってことRでできますか? 例えば 1 2 3 4 5 6 7 8 9 10 11 12.... を 3 2 4 .... という空白ごとに区切って 1 2 3 4 5 6 7 8 9 10 11 12.... としたいのです。 もし可能ならこのような場合,最初の文字列を配列に組み込むべきなのか,文字列として正規表現として処理するべきなのかどちらが好ましいのでしょうか? よろしくお願いします
356 名前:132人目の素数さん mailto:sage [2012/01/25(水) 19:06:09.47 ] >>355 > f355 <- function(x,y){ + s <- unlist(strsplit(x," ")) + res <- vector() + j <- cumsum(y) + res[1] <- paste(s[1:j[1]],collapse='') + res[2] <- paste(s[(j[1]+1):j[2]],collapse='') + res[3] <- paste(s[(j[2]+1):length(s)],collapse='') + return(res) + } > > f355("1 2 3 4 5 6 7 8 9 10 11 12",c(3,2,4)) [1] "123" "45" "6789101112" こんな感じか。 あとは、res[1]からres[3]のところをfor文と条件分岐で処理して、 汎用化すればよいと思う。
357 名前:356 mailto:sage [2012/01/25(水) 19:08:12.54 ] 6789と101112を区切ってなかった。 > f355 <- function(x,y){ + s <- unlist(strsplit(x," ")) + res <- vector() + j <- cumsum(y) + res[1] <- paste(s[1:j[1]],collapse='') + res[2] <- paste(s[(j[1]+1):j[2]],collapse='') + res[3] <- paste(s[(j[2]+1):j[3]],collapse='') + res[4] <- paste(s[(j[3]+1):length(s)],collapse='') + return(res) + } > > f355("1 2 3 4 5 6 7 8 9 10 11 12",c(3,2,4)) [1] "123" "45" "6789" "101112"
358 名前:356 mailto:sage [2012/01/25(水) 19:36:19.47 ] 連投すまんがcut()を使った別解。 > f355.2 <- function(x,y){ + s <- unlist(strsplit(x," ")) + n <- as.integer(cut(as.integer(s),c(0,cumsum(y),Inf))) + sapply(1:length(unique(n)),function(x){s[n==x]}) + } > > f355.2("1 2 3 4 5 6 7 8 9 10 11 12",c(3,2,4)) [[1]] [1] "1" "2" "3" [[2]] [1] "4" "5" [[3]] [1] "6" "7" "8" "9" [[4]] [1] "10" "11" "12" 多分、識者ならsapply()部分をもっと効率よくできる気がする。
359 名前:132人目の素数さん mailto:sage [2012/01/26(木) 01:27:31.67 ] f355.3 <- function(x, y) { STR.SPLIT <- strsplit(x," ")[[1]] ## y = c(3, 5, 1) で c(1,1,1,2,2,2,2,2,3)を返す GROUP <- inverse.rle(list(lengths = y, values = seq_along(y))) ## 上記のGROUPにあわせてsplit() split(x = STR.SPLIT[seq_along(GROUP)], f = GROUP) } ## これなら数字の順番がめちゃくちゃでも、文字列でも行けるかも。spaceが続くとおかしくなるけど f355.3(x = "2 ch R 2012 01 26 2 0 1 2 0 1 2 6 R", y = c(3, 5, 1, 2, 2))
360 名前:355 [2012/01/26(木) 07:03:57.07 ] >356-359 ご教授ありがとうございます。 配列に組み込んだものをループで処理することしか考えてませんでしたので, 以外な回答です。 プログラムに関しては勉強中なのですがなかなか上手くいかず悩んでおります。 ありがとうございます
361 名前:355 [2012/01/26(木) 08:28:33.03 ] 連投申し訳ありません。 これまで統計処理に関してRを利用してきましたが,この度プログラミングもしっかり勉強したいと思うようになりました。 先にも記したようにプログラミングは初学者です。 CやPerlなど多様な言語がありますが,Rの場合どの系統のプログラミング教本で勉強を始めれば良いのでしょうか? オススメ教科書があればよろしくお願い致します。
362 名前:132人目の素数さん mailto:sage [2012/01/26(木) 10:23:38.00 ] >>361 >>356 だけど、正統なプログラミングの勉強をしたことがない。 プログラミングの勉強って、語学の勉強と似ていると思う。 一通り、文法を勉強したら、あとはひたすら経験を積むだけ。 人の表現を聞いて、あぁこういう場面ではこういう風に言えばいいのか、 と人まねを積み重ねる。 一通りの文法レベルの話なら、私はまだ未読だけど、 間瀬先生のRプログラミングマニュアルはどうかな。 間瀬先生の本なら、間違いはないと思う。 >>359 おぉ素晴らしい。rle()の存在を失念していました。
363 名前:359 mailto:sage [2012/01/26(木) 11:44:04.18 ] 統計解析に持っていくためのデータの準備ということであれば Rデータ自由自在(Data Manipulation with R)がおすすめ。 Rプログラミングマニュアル(間瀬)は辞書的な感じ。 Rの基礎とプログラミング技法(石田訳)、プログラミングR(高階)は読み物的な感じ。 レイアウト的に後者の方が読みやすいか。 海外では最近出たThe Art of R Programmingがよいとされている様子。
364 名前:132人目の素数さん [2012/01/27(金) 14:53:34.00 ] あるベクトルの,p番目からq番目までの和を求める関数ってある?
365 名前:364 mailto:sage [2012/01/27(金) 15:34:02.11 ] 基本的な物を見落としておりますた。 すみません
366 名前:132人目の素数さん mailto:sage [2012/01/28(土) 12:45:02.86 ] >>364 sum(vector.name[p:q]) が一番普通か
367 名前:132人目の素数さん mailto:sage [2012/01/30(月) 00:42:00.17 ] コンタープロットで、データがマトリクスになっている場合はいいのですが (x,y,z)= (0,0,0) (1,1,2) (3,2,4) (0,9,2) (2,0,4) みたいに不規則な点列で構成された場合のコンタープロットを作成することは 出来ませんでしょうか? Zの値を0〜1に正規化して、(x,y)の位置にgray(z)で塗りつぶした円を二次元プロットする っていう手法でそれらしいものを作ってはみたものの、やっぱりイマイチなのでw
368 名前:132人目の素数さん mailto:sage [2012/01/30(月) 11:00:34.81 ] >>367 ぱっと思いつくのは、グリッドを作成して、(x,y,z)の値から、スプラインやkrigingなど 空間平滑法で各グリッド点における値を推定し、それで等値線を描く。
369 名前:名無しさん mailto:sage [2012/01/30(月) 21:51:46.12 ID:???] >>368 krigingでググると web.sfc.keio.ac.jp/~maunz/wiki/index.php?%C2%E807%B2%F3%B1%E9%BD%AC%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB っていうのが見つかりました。 ちょっとやってみます。どもでした。
370 名前:名無しさん mailto:sage [2012/01/30(月) 23:07:03.68 ID:???] フジテレビ式円グラフはどうやって作ればよいのでしょうか? blog.livedoor.jp/dqnplus/archives/1692812.html 自分にはこんなのが精一杯でした... library(ggplot2) DF <- data.frame(age=c("10〜20代", "30代","40代","50代"), value=c(97,78,78,94)) ggplot(DF, aes(x=age, y=value, fill = age)) + geom_bar(width = 1) + scale_y_continuous(breaks = 0:100) + coord_polar() + labs(x = "", y = "") + opts(legend.position = "none", axis.text.y = theme_blank(),axis.ticks = theme_blank())
371 名前:名無しさん mailto:sage [2012/01/30(月) 23:16:40.05 ID:???] >>370 また奥村先生がアップをはじめそうなグラフが出てきたな。
372 名前:名無しさん mailto:sage [2012/01/31(火) 00:39:21.68 ID:???] 中心をずらすって言うのはグラフ的にあり得ないからグラフのパッケージでは無理だと思う。 できるとしたら地図関係のパッケージだろうね。
373 名前:名無しさん mailto:sage [2012/01/31(火) 10:47:16.46 ID:???] >>369 こんな感じじゃないの i <- (1:360)/360*2*pi cntr <- c(0.1,0.3) v <- c(94,78,78,97) arc <- cut(1:360,c(0,round(cumsum(v)*360/sum(v)),Inf)) plot(cos(i),sin(i),type="n",asp=1,axes=FALSE,xlab="",ylab="") l <- levels(arc) cols <- c("deepskyblue","dodgerblue1","dodgerblue3","brown1") lbs <- c("50代\n94人","40代\n78人","30代\n78人","10〜20代\n97人") cexs <- c(1.5,1.5,1.5,3) for (j in 1:4){ k <- c(i[arc==l[j]],max(i[arc==l[j]])+1/360*2*pi) polygon(c(cntr[1],cos(k)),c(cntr[2],sin(k)), col=cols[j]) text(mean(cos(k))/1.5,mean(sin(k))/1.5,lbs[j],cex=cexs[j]) }
374 名前:名無しさん mailto:sage [2012/01/31(火) 12:12:08.71 ID:???] >>370 ウジのグラフは、センターがずれてるだけじゃなくて「弧の長さの割合」も意図的に変えてるから、完全再現は無理みたいよw 参考 blog.kzfmix.com/entry/1327735061 そもそも、あんなおぞましいグラフを好んで描く必要ないと思うけど、こんなんでどう? library(grid) quartz(height=4, width=4) #png(filename = "fuji-pie.png", width = 360, height = 360, units = "px") num <- c(94, 97, 78, 78) distortion <- c(1, 1.2, 1, 1) # <- !! dist_num <- num * distortion cum <- c(0, cumsum(dist_num)) rad <- cum / sum(dist_num) * 360 / 180 * pi colors <- c("#0000FFAA", "#FF0000AA", "#000055AA", "#0000AAAA") labels <- paste(c("50ies¥n", "10~20ies¥n", "30ies¥n", "40ies¥n"), num, " ps", sep="") lab_cex <- c(1, 1.5, 1, 1) lab_col <- c("white", "yellow", "white", "white") div <- 200 # 円弧部分の分割数 dx <- 0 # 半径=0.5 として、x 方向への中心のズレ (-0.1 とかにすると、より強烈w) dy <- 0.1 # 半径=0.5 として、y 方向への中心のズレ for (i in 1:length(num)) { x <- c(0.5 + dx, 0.5 + 0.5 * sin(rad[i]), 0.5 + 0.5 * sin(seq(rad[i], rad[i+1], length.out=div)), 0.5 + 0.5 * sin(rad[i+1])) y <- c(0.5 + dy, 0.5 + 0.5 * cos(rad[i]), 0.5 + 0.5 * cos(seq(rad[i], rad[i+1], length.out=div)), 0.5 + 0.5 * cos(rad[i+1])) grid.polygon(x=x, y=y, gp=gpar(fill=colors[i])) grid.text(x=0.5 + 0.4 * sin((rad[i]+rad[i+1])/2), y=0.5 + 0.4 * cos((rad[i]+rad[i+1])/2), label=labels[i], gp=gpar(col=lab_col[i], cex=lab_cex[i])) } #dev.off() RjpWikiにも置いときました。 www.okada.jp.org/RWiki/?R%20%A4%C7%A5%A8%A5%F3%A5%BF%A5%E1#nf026bb6
375 名前:名無しさん mailto:sage [2012/01/31(火) 12:41:24.02 ID:???] >>373-374 すげー これフジテレビに売り込みにいけよwww
376 名前:373 mailto:sage [2012/01/31(火) 14:45:06.35 ID:???] 私の方もRjpwikiに追加しておきました。 >>374 さんは河童さんかと一瞬思ったけど、 そういえば河童さんはgridが嫌いだったから、別な人ですね。
377 名前:375 mailto:sage [2012/01/31(火) 23:04:16.60 ID:???] もちろん、河童さんの足下にも及ばない半素人です 裏Wikiの方でも、がっつりとダメ出しされましたw でも「裏」氏のファンなので、ちょっと嬉しかったりもしますw
378 名前:374 mailto:sage [2012/01/31(火) 23:16:34.60 ID:???] ↑で、名前間違えてた...orz
379 名前:名無しさん mailto:sage [2012/01/31(火) 23:52:13.20 ID:???] まさに誰得関数!
380 名前:132人目の素数さん mailto:sage [2012/02/02(木) 15:19:45.32 ] 知恵を貸してください。 0〜6ぐらいまでの整数を要素にもつサイズが50のベクトルを作りたい。 できればポアソン分布に従って。 ここまでなら、 > rpois(50,2.5) [1] 1 1 1 4 4 3 0 3 3 3 0 1 1 0 4 5 2 2 2 2 4 0 4 4 2 1 3 1 1 3 3 2 1 1 3 4 3 3 [39] 3 3 4 1 1 1 5 5 1 0 3 6 こんな感じでできるんだけど、このベクトルの合計をきっちり150にしたい。 固定したいのは、ベクトルサイズ50とベクトル合計値150だけで、lambdaとかは適当でいい。 当たり前だけど、合計値は変動する。 > sum(rpois(50,2.5)) [1] 132 > sum(rpois(50,2.5)) [1] 131 > sum(rpois(50,2.5)) [1] 118 こういうときはどうすればいいんだろうか。 よろしくお願いします。
381 名前:132人目の素数さん [2012/02/02(木) 16:52:09.32 ] >>380 無理やりの処理だが、こんなんじゃ駄目? mypois <- function(n=50,sum=150,adjtimes=10){ myvec <- rep(0,times=n) mysum <- 0 for(i in 1:adjtimes){ mysum <- sum(myvec) myvec <- myvec + sign(sum-mysum)*rpois(n,abs(sum-mysum)/n) myvec[myvec < 0] <- 0 if( abs(sum-mysum) == 0 ){ break } } return(myvec) } > x <- mypois(50,150) > x [1] 3 2 3 2 5 3 4 5 4 0 1 1 5 4 6 3 5 5 0 4 4 3 4 5 4 7 1 4 1 2 1 2 3 2 1 3 7 2 [39] 0 2 2 3 0 1 3 6 3 4 2 3 > sum(x) [1] 150
382 名前:381 mailto:sage [2012/02/02(木) 17:00:53.33 ] 0から6になってなかったのと、計算の順番がおかしかったので修正した。 mypois <- function(n=50,sum=150,max=6,adjtimes=10){ myvec <- rep(0,times=n) mysum <- 0 for(i in 1:adjtimes){ myvec <- myvec + sign(sum-mysum)*rpois(n,abs(sum-mysum)/n) myvec[myvec < 0] <- 0 myvec[myvec > max] <- max mysum <- sum(myvec) if( abs(sum-mysum) == 0 ){ break } } return(myvec) } > x <- mypois(50,150,6) > x [1] 1 6 1 0 5 3 5 1 2 6 3 3 6 3 3 3 3 3 1 4 2 3 3 0 5 4 3 6 3 5 2 4 4 0 2 1 3 3 [39] 2 4 0 2 1 3 6 4 4 2 1 6 > sum(x) [1] 150
383 名前:381 [2012/02/02(木) 17:33:39.03 ] 青木先生のところの poissondist に嵌めたら、今一つなのは、 0〜6からはみ出たデータを丸めたからかな。上手い方法がないものかねぇ。 > x <- mypois(50,150,6) > x [1] 5 2 1 3 4 4 3 4 3 0 5 5 3 3 1 2 4 4 4 2 5 0 3 4 2 2 3 4 4 1 6 1 1 5 4 4 2 4 [39] 2 5 1 3 2 0 5 2 5 4 1 3 > poissondist(hist(x,plot=F)$counts) ポアソン分布への適合度の検定 data: hist(x, plot = F)$counts X-squared = 9.7821, df = 4, p-value = 0.04426 sample estimates: n lambda 50.00 2.06
384 名前:132人目の素数さん mailto:sage [2012/02/02(木) 18:40:11.25 ] >>381-383 おぉ、十分です。最大は「6ぐらい」なので7とかでもOKですから、 丸めはマイナスになるときだけ必要です。 for文のところはとても勉強になりました。 ありがとうございました。
385 名前:132人目の素数さん mailto:sage [2012/02/06(月) 23:36:20.10 ] こんばんはR初心者です。 一通り調べたのですが、分からない事があるので質問させてください。 ○行ごとのplotを行いたい場合、どのようなコマンドを打てば良いのでしょうか? 例えば、 y1 y2...y10 x1 x2 . . . x100 このような100行×10列のデータフレーム名Xの2列目と4列目をplotしたい場合、 plot(X$y2,X$y4)で1行ごとのplotは出来るのですが、 これをx1,x5,...x100と5行おきにplotしたいのです。 どうかご教授ください。
386 名前:132人目の素数さん mailto:sage [2012/02/07(火) 00:25:49.86 ] >>385 X1 <- X[(0:20)*5+2, ]
387 名前:132人目の素数さん mailto:sage [2012/02/07(火) 08:46:05.39 ] >>385 >このような100行×10列のデータフレーム名Xの2列目と4列目をplotしたい場合、 >plot(X$y2,X$y4)で1行ごとのplotは出来るのですが、 >これをx1,x5,...x100と5行おきにplotしたいのです。 plot(X[seq(1, 100, 5), c(2, 4)]) でどう? [行番号, 列番号] で要素を指定 seq(from, to, by)で1,6,11.16...,100をつくる
388 名前:132人目の素数さん mailto:sage [2012/02/07(火) 22:43:27.83 ] >>385 1,5,...,100 は、最初だけ4行の間隔ですね。 5,10,15,...,100 、あるいは、1,6,11,...,96 ですか? でしたら、私のお薦めも >>387 と同じ方法。
389 名前:132人目の素数さん mailto:sage [2012/02/08(水) 13:38:50.77 ] Emacs ESS でアンダースコアが" <- "になってしまうのが凄く迷惑なんだけど なんであれがデフォルトなんだろう
390 名前:132人目の素数さん mailto:sage [2012/02/08(水) 17:34:58.86 ] タイプ量減るしいいじゃん。
391 名前:132人目の素数さん mailto:sage [2012/02/08(水) 20:31:18.89 ] >>389 アンダースコア2度打ちで、アンダースコアを入力できるというのを 知った上で迷惑と行っているのだろうね。 そもそもRではアンダースコアは使用禁止だったので、 空いているアンダースコアにその機能が割り当てられたという歴史的経緯がある。 デフォルトの理由は、>>390 の言うとおり便利で楽だかから。 いやな人は設定を変更すればいいし。 逆にターミナルでRを使っていて、<-のつもりでアンダースコアを入力して イラッと来ることがある。
392 名前:132人目の素数さん mailto:sage [2012/02/08(水) 22:46:01.26 ] >>391 設定変えるためにググってたらrjpに飛んで、そこで初めて二度打ちやC-q _ でアンダースコアを入力できることを知った アンダースコアを打つためにわざわざテキストモードに変更してた よく調べもしないで愚痴言ってすいません
393 名前:132人目の素数さん mailto:sage [2012/02/13(月) 12:25:46.70 ] emacs essでRコマンダー使うとRコマンダーで外部データを読み込ませた瞬間固まるorz うまくいってるかたいますか?
394 名前:393 mailto:sage [2012/02/13(月) 14:44:06.36 ] すいません自己解決?しました。 emacsのR側で一行でも改行がコマンドを実行すればコマンダー側のフリーズが直りました。 フリーズ自体は何台かのPCで試したところ起こる場合と起こらない場合がありました。 環境に依存するようです。
395 名前:132人目の素数さん [2012/02/13(月) 22:00:37.21 ] >>393 ,394 emacs ess で Rコマンダーを使うメリットって、何? 利点がまったく分からないのだけど。
396 名前:393 mailto:sage [2012/02/14(火) 00:04:31.33 ] >>395 ご指摘のとおりで。 研究仲間がコマンダー使ってて、両方同時に使えると便利だから試しました。 まぁそうじゃなくても使えないよりは使えたほうが少しくらい便利かなと、、、