COLOR(green){SIZE(20){初心者のための R および RjpWiki に関する質問コーナー}}~

COLOR(blue){注意}:新規記事用の入力欄は以下の目次の直後にあります。各記事への追加コメントの入力欄は、各記事の後にあります。質問が長くなる場合は、まず出だしだけ投稿し、次に編集ボタンでそれを修正、追加するのが便利です。>>[[簡単な投稿法]]

もし新規に質問をされる場合は、効率的にコメントを得るためにも、善意のコメント者の時間を無駄にしないためにも、以下に特にご注意下さい。[[R のメイリングリストへの投稿記事のガイド]] も参考になります。
- 広い意味で R に関係する話題に限定 
- 学校の宿題は自分で考えるべきです
- 具体的な状況がわかる様に背景説明をけちらない。特に使用環境を添えるのは常識です。COLOR(magenta){sessionInfo() とすればそうした情報が簡単にえられます。}
- [[google などの検索エンジン:http://www.google.co.jp]] や [[CRAN の検索エンジン:http://finzi.psych.upenn.edu/search.html]]、 [[マニュアル:http://buran.u-gakugei.ac.jp/~mori/LEARN/R/]] を調べた上での質問かどうかを書き添えれば、空振りコメントが減るでしょう。せっかくのコメントに「実はそれはすでに調べたことなのですが」と後から言われたときの回答者の不快感を想像すべきです。
- 自分には馴染みでも、他の人には馴染みの無い手法・概念もあります。日本語は得てし てわかりにくい(英語名をそえると案外わかるものです)ものです。
- もし問題が解決した(結局解決しない場合を含め)場合はその旨報告していただくとコメント者や他の人に参考になります。また後で関連情報をこのWikiに要約記事としてご投稿いただくと今後の参考になります。
- 後で他の人が参照する際の便宜のため、簡潔で内容が推察できるようなタイトルをつけて下さい~
- 回答者は神通力を持ってはいません。COLOR(magenta){「これこれしたが、うまく動きません」といった質問}には、あなたの試みたことが回答者に再現できるような、データ、コード、エラー出力(そして、R のバージョン、使用 OS、使用非標準パッケージ名)を添えることをお勧めします。あまりに長くなる場合は適宜編集して下さい。~
- もし,初心者のあまりに稚拙な質問に苛々してしまう方の為には,[[Q&A (上級者コース)]]があります. ここなら, 稚拙な質問は来ないはずですので精神衛生上にもよろしいかと思います. ~
~

----
COLOR(red){過去の記事のアーカイブ} 。アーカイブ中の記事への追加コメントは自由です。ただしあまり古い記事の場合は、このページに新規に項目を立てられた方が良いかも知れません。~
-[[初級Q&A アーカイブ(5)]] (元記事が 2005-03-13 より 2006-06-26 まで)~
-[[初級Q&A アーカイブ(4)]] (元記事が 2005-11-09 より 2006-01-25 まで)~
-[[初級Q&A アーカイブ(3)]] (元記事が 2005-05-02 より 2005-11-07 まで)~
-[[初級Q&A アーカイブ(2)]] (元記事が 2004-12-13 より 2005-04-26 まで)~
-[[初級Q&A アーカイブ(1)]] (元記事が 2004-08-03 より 2004-11-30 まで)~
----
#contents
----
COLOR(red){注意}:投稿失敗した記事をページ先頭の「新規|編集|差分|添付」の「編集」から消すときは、#article と書いた行まで消さないように注意しましょう。新規の記事投稿ができなくなります。もし、編集方法がわからなければ [[簡単な投稿法]] を見てください。具体的な状況がわかる様に背景説明をけちらない。特に使用環境を添えるのは常識です。COLOR(magenta){sessionInfo() とすればそうした情報が簡単にえられます。}
また命令 COLOR(red){RSiteSearch("キーワード")} を実行すれば、R 関係の文献・MLから関連記事を検索し表示してくれますのでお試しを。例 COLOR(red){RSiteSearch("least abs")}。
#article
**大きなサイズの行列
>[[悩める108番]] (2006-07-21 (金) 16:53:37)~
~
R でサイズの大きな行列を作りたいのですが,エラーが出てしまいます。~
 > x <- matrix(NA, 100000, 5000)
 エラー:サイズ 1953125 Kb のベクトルを割り当てることができません
memory.limit(size=4095)としてメモリーを増やしても状況は変わりません。~
R で扱える行列やベクトルのサイズに何か制限があるのでしょうか?~
扱えるサイズを大きくする方法がありましたら是非教えてください。~
~
Windows XP で R(Version 2.3.1) を使用しています。~

//
-扱えるサイズを大きくする方法? Macintoshを使う(以下を参照)~
本当にそんなに大きな行列が必要なのか検討する。 --  &new{2006-07-21 (金) 16:59:44};
 > x <- matrix(NA, 100000, 5000) # エラーは出ませんでしたね
 > sessionInfo()
 Version 2.3.1 (2006-06-01) 
 powerpc-apple-darwin8.6.0 
 
 attached base packages:
 [1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets" 
 [7] "base"     
 # でもね,ここで喜んではいけない
 > x <- matrix(0, 100000, 5000)
 エラー:サイズ 3906250 Kb のベクトルを割り当てることができません
 ということだからね。
 実際に NA で領域を確保して安心して作業していくと突然アウトになり
 計算時間がパーになるということだから
 教訓: NA は数値と同じバイト数を使用しているのではない
-[[単語検索:http://www.okada.jp.org/RWiki/index.php?cmd=search]]で,memory.limit を検索してみましょう。みんな悩んで大きくなってるんです(^_^;) --  &new{2006-07-21 (金) 17:12:00};
-必要なメモリー量は約3.7GBです。Windows XP では確か高々 3GB, Linux 32ビット版では 4GB. --  &new{2006-07-21 (金) 17:28:03};
-早速のご回答,ありがとうございます。Windows では無理だということですね... 大規模なデータを扱っているので大きなサイズの行列が作れると便利だったのですが,小分けして分析する方向を検討します。Macですか...分析用に購入することも検討してみようかしら。 -- [[悩める108番]] &new{2006-07-21 (金) 17:30:08};
-のんびりコメントを書いている間にさらに書き込みが!やっぱり小分けするしかなさそうですね。 -- [[悩める108番]] &new{2006-07-21 (金) 17:33:14};
-小分けしてやるというのも,工夫の一つでしょうが,問題によってはそもそもそんなに大きい配列を必要としないアルゴリズムがあったりするものなんですよ。何をやりたいがためにそんなに大きい配列が必要なのか,差し支えなければ説明してみたら,いい方法があるよと教えてくれることがあるやも。 --  &new{2006-07-21 (金) 17:49:32};
-たとえば,単語が5000個あり,ひとりの人に対してランダムに100個を選んで提示し好き嫌いを判断してもらうという調査をし,のべ10万人分のデータがあるとします。一試行につき一行のデータで,各列が単語に相当し,好きな場合は1, 嫌いな場合は0,提示していない場合は NA といようにしたかったのです。 -- [[悩める108番]] &new{2006-07-21 (金) 19:17:01};
-好き,嫌い,NAなら,logical で表せますね。それをどのように扱うのか(データ処理するか)にもよるでしょうが。まあ,示されたのはたとえ話で(本当にそんな調査があるとは思えない。任意の100個というのもうさんくさいし(^_^;))しょうが,全部のデータをメモリ上に読み込んでからエイヤとデータ処理する必要性があるんでしょうかね。どんな処理をするかにもよるんでしょうが。また,この例のデータというのはものすごく疎な行列50分の1のセルにしか有効なデータがない訳ですから,データ構造を工夫すればもう少しメモリは少なくて済むでしょう。~
最悪の場合は,配列にアクセスすることをファイルにアクセスすることにおきかえれば,ファイルの一行ずつを読みながら必要な処理を行うということだってできますよね。処理によっては,何回も同じファイルを頭から読まないといけないことにはなるでしょうが。~
メモリが少なかったりした昔は,如何に少ないメモリで大量データを扱うかを工夫しましたね。今は,よっぽど大量データでなければメモリのことなんか考える必要がないから,全部読んでから処理しましょうということが当たり前になっている。 --  &new{2006-07-21 (金) 19:52:36};
-今現在は小分けにしてといいますか,(たとえで出した話でいくと)100列の行列をいくつか作って少しずつ処理しています。一括で処理できたら楽だなと思ったのですが,やはり無謀だったようですので,このまま小分けにして進めていこうかと思います。いろいろとご助言くださりありがとうございました。 -- [[悩める108番]] &new{2006-07-21 (金) 21:03:51};

#comment

**三次元散布図
>[[こきの]] (2006-07-19 (水) 09:49:02)~
~
3次元データの散布図を描こうと思っています。scatterplot3dでも描くことはできるのですが、視点の方向を変えることができないので、他の関数、例えばperspを使おうとしたのですが、うまくいきません。~
 >df
           x        y        z
 1   3.84259  0.33827 -2.68857
 2   3.74074  0.30671 -2.70986
 3   3.63889  0.31040 -2.72956
 4   3.53703  0.24631 -2.74724
 5   3.44444  0.21750 -2.76244
 6   3.35185  0.18963 -2.77469
 7   3.25926  0.16269 -2.78344
 8  27.58333 -1.37959  3.13160
 9  27.47222 -1.41234  3.12405
 10 27.35185 -1.44607  3.11179
 11 27.23148 -1.48081  3.09444
 >persp(df[["x"]],df[["y"]],df[["z"]])
 以下にエラーpersp.default(df[["x"]], df[["y"]], df[["z"]]) :
         'x' と 'y' の値は昇順でなければなりません
x,yの2次元情報で点をソートする方法がよくわかりません。そういう関数はありますでしょうか?また、perspは3次元散布図には向いていないのでしょうか?他によいプロット用関数はありますでしょうか?~

//
-rglライブラリでは? 垂水・飯塚:R/S-PLUSによる統計解析入門,共立出版の46〜48ページに例が載っています。 -- [[高井]] &new{2006-07-19 (水) 10:21:24};
-ご回答ありがとうございます。rglライブラリを調べてみました。この関数を使うには、散布データを、2次元グリッド上に並べてやる必要があるようです。上記のようなデータをrglのような関数へ入力するため、グリッド上に整列してやるような関数はRには無いのでしょうか? -- [[こきの]] &new{2006-07-19 (水) 11:17:40};
-persp 関数で気に入るかどうかは別にして、以下(説明用の無意味な例)を参考にしてください。 それと、適当にやってうまく行かなかったらヘルプを読みましょうね (英語も上達するし)。 --  &new{2006-07-19 (水) 12:34:26};
 x <- runif(1000); y <- runif(1000); z <- runif(1000)
 a <- matrix(NA, 100,100)
 x0 <- min(x); x1 <- max(x)
 y0 <- min(y); y1 <- max(y)
 xx <- ceiling(100*(x-x0)/(x1-x0))
 yy <- ceiling(100*(y-y0)/(y1-y0)) 
 for (i in 1:1000) a[xx[i],yy[i]] <- z[i]
 persp(1:100, 1:100, a)
-さて,persp の x, y グリッドは不等間隔でも良いと言うことではあるが,11×11のグリッド点で,z の値を持つのは11個しかないわけで,persp 描いたらどうなることやら。 --  &new{2006-07-19 (水) 13:35:17};
 > df <- read.table("persp.dat", header=TRUE)
 > x <- sort(df[,1])
 > y <- sort(df[,2])
 > n <- nrow(df)
 > z <- matrix(NA, n, n)
 > for (i in 1:n) {
 + 	ix <- which(x == df[i, 1])
 + 	iy <- which(y == df[i, 2])
 + 	z[ix, iy] <- df[i, 3]
 + }
 > z
          [,1]    [,2]    [,3]   [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
  [1,]      NA      NA      NA     NA -2.78344       NA       NA       NA       NA
  [2,]      NA      NA      NA     NA       NA -2.77469       NA       NA       NA
  [3,]      NA      NA      NA     NA       NA       NA -2.76244       NA       NA
  [4,]      NA      NA      NA     NA       NA       NA       NA -2.74724       NA
  [5,]      NA      NA      NA     NA       NA       NA       NA       NA       NA
  [6,]      NA      NA      NA     NA       NA       NA       NA       NA -2.70986
  [7,]      NA      NA      NA     NA       NA       NA       NA       NA       NA
  [8,] 3.09444      NA      NA     NA       NA       NA       NA       NA       NA
  [9,]      NA 3.11179      NA     NA       NA       NA       NA       NA       NA
 [10,]      NA      NA 3.12405     NA       NA       NA       NA       NA       NA
 [11,]      NA      NA      NA 3.1316       NA       NA       NA       NA       NA
          [,10]    [,11]
  [1,]       NA       NA
  [2,]       NA       NA
  [3,]       NA       NA
  [4,]       NA       NA
  [5,] -2.72956       NA
  [6,]       NA       NA
  [7,]       NA -2.68857
  [8,]       NA       NA
  [9,]       NA       NA
 [10,]       NA       NA
 [11,]       NA       NA
-視点を変えて三次元散布図を見るというのなら,rgl の points3d 関数がぴったりなんじゃない? --  &new{2006-07-19 (水) 13:59:25};
 df <- structure(c(1.8, -0.3, 0.3, -1.1, 1.2, 0.9, 0, 0.1, 0, -1.3, 
 0.5, 0.8, -0.2, -0.7, 0, 0.1, -2.9, -0.4, 1.2, 0.1, 2, -0.5, 
 1.4, -0.3, 0.5, -0.7, 1.5, 0.1, -1.1, -1.7, 0.2, 1.1, -0.3, -0.2, 
 -0.7, 0.5, -2, 0.3, 0.4, -0.4, 1.7, 0.1, 1.2, 0.4, 0.8, -0.7, 
 1.1, 0.2, -1.6, -0.8, -0.4, 0.2, -0.1, 0.6, -0.1, 0.2, -2.9, 
 -0.5, -0.4, 0.8), .Dim = c(20, 3))
 x <- sort(df[,1])
 y <- sort(df[,2])
 n <- nrow(df)
 z <- matrix(0, n, n)
 for (i in 1:n) {
  	ix <- which(x == df[i, 1])
 	iy <- which(y == df[i, 2])
 	z[ix, iy] <- df[i, 3]
 }
 z
 points3d(x, y, z)
#ref(3dplot.png)
-みなさんいろいろありがとうございました。教えていただいたグリッド化やpoints3dで絵が描けました。 -- [[こきの]] &new{2006-07-19 (水) 16:29:58};

#comment

**三角行列の作り方。
>[[ぼう]] (2006-07-18 (火) 23:22:08)~
~
以下のtestdata.txtのようなtab区切り0値無しの三角行列をmatrixとして読み込みたいのですが、0値がないためread.tableでは読み込めず、行名が邪魔をしてscanでもうまくよめませんでした。よめれば行数はわかっているのでバッファーbに b[lower.tri(b)] <- x とできそうなのですが・・・ この例ではEXCELで整形して0を入れてしまうこともできますが、実際には大規模データのため容易ではありません。 ~
どなたか妙案をお持ちの方がおられませんでしょうかよろしくお願いします。 ~
~
 #testdata.txt
 	A	B	C	
 A1
 A2	16.81
 A3	78.80	14.40

//
-プログラム言語だから,エレガントでなくても良いならどうとでもなる。 --  &new{2006-07-18 (火) 23:57:35};
 > con <- file("testdata.txt", open="r")
 > first <- readLines(con, 1)
 > cn <- unlist(strsplit(readLines(con, 1), "?t"))[-1]
 > n <- length(cn)
 > m <- matrix(0, n, n)
 > rn <- character(n)
 > for (i in 1:n) {
 + 	row.i <- unlist(strsplit(readLines(con, 1), "?t"))
 + 	rn[i] <- row.i[1]
 + 	if (i > 1) {
 + 		m[i,1:(i-1)] <- as.numeric(row.i[-1])
 + 	}
 + }
 > rownames(m) <- rn
 > colnames(m) <- cn
 > close(con)
 > m
        A    B C
 A1  0.00  0.0 0
 A2 16.81  0.0 0
 A3 78.80 14.4 0
-ありがとうございます.unlist(strsplit(readLines()))と強引に行ごとにひっぱりだせるのですね.言語としてのRを語られることは少ないですのでfileの扱い方大変勉強になりました. -- [[ぼう]] &new{2006-07-19 (水) 01:19:56};
-read.table 関数の fill=TRUE オプション (既定では fill=FALSE) を使いましょう。但し、testdata.txt の最初の行を例えば A0 A B C と変えておく必要があります。 --  &new{2006-07-19 (水) 06:38:38};
 > ( x <- read.table("testdata.txt", header=TRUE, fill=TRUE) )
   A0     A    B  C
 1 A1    NA   NA NA
 2 A2 16.81   NA NA
 3 A3 78.80 14.4 NA
 > ( xx <- as.matrix(x[,2:dim(x)[2]]) ) # データフレームを数値行列に変換 
       A    B  C
 1    NA   NA NA
 2 16.81   NA NA
 3 78.80 14.4 NA
 > row.names(xx) <- x[,1] # 行ラベル名が必要なら
 > xx
        A    B  C
 A1    NA   NA NA
 A2 16.81   NA NA
 A3 78.80 14.4 NA
 > xx[is.na(xx)] <- 0  # NA 値が嫌なら
 > xx
        A    B C
 A1  0.00  0.0 0
 A2 16.81  0.0 0
 A3 78.80 14.4 0
-↑「日の下に新しい物は無い(旧約聖書)」。こんなオプションがあるというのは、おんなじ事に悩んだ人が過去に沢山いたということですね。「悩んだときは使えるオプションを探せ」、が過去に何度も悩んだ挙げ句学習した知恵です。 --  &new{2006-07-19 (水) 07:13:20};
-おお,「灯台もと暗らし」,read.tableにfillなんて便利なオプションがあったのですね.ありがとうございます. -- [[ぼう]] &new{2006-07-19 (水) 13:58:36};

#comment

**データ読み込みという初歩の初歩
>[[さとう]] (2006-07-15 (土) 12:03:07)~
~
データの読み込みがうまくできなくて困っています。~
txtファイルを読み込もうとしているのですが,以下のようなエラーがでます。
 >  depth<-read.table("depth.txt",header=T)
 以下にエラーscan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
         '52' 行目には,4 個の要素がありません
52行目なるところを確認したのですが,おかしいところはありません。~
何かもっと初歩的なところで間違いがあるのでしょうか?~
どなたか,すいませんが教えてください。R.2.3.0使用です。~

//
-最初はread.csv()あたりから挑戦してはいかが。read.table()やscan()はある程度なれてから。おそらく52行以外はスペースを含む文字列があったりするのだろうけど。これだけの情報では何とも。 --  &new{2006-07-15 (土) 15:50:52};
-> 52行目なるところを確認したのですが,おかしいところはありません。~
そうはいっても,私はあなたの言うことよりは R を信じますので,その52行目の前後も含めて数行分を呈示するのが問題解決の早道だと思いますよ。~
なお,[[簡単な投稿法]]も読んでおいてくださいね。 --  &new{2006-07-16 (日) 11:29:10};
-エディターなどで確認していますか?初心者と言われるヒトはエクセルなどで確認してしまい、間違いがわからないことが良くあります。~
みなさんがおっしゃるように、52行目に4個の要素がなく、他の行が4個の要素になっています。それでも間違っていないというなら、Rを再インストールしては?~
まずは
 1,2,3,4
 1,2,3,4
 1,2,3
 1,2,3,4

 1,2,3,4
 1,2,3,4
 1,2,3,4
 1,2,3,4
をそれぞれエディターでテキストファイルにして確認してはどうですか?~
初心者が自分のデータをいきなり適用して、失敗するケースが多発していますね。 --  &new{2006-07-17 (月) 09:46:47};
-みなさま,ありがとうございました.解決いたしました. -- [[さとう]] &new{2006-07-20 (木) 19:37:19};
-あのね。解決しましたという言葉だけでは,終わりませんよ。どのように解決したということを,報告してくださいよ。あとあと,このスレッドを見る人に対して,何の情報もないじゃないですか。あなたはそれで良いかもしれないけど,それはこの質疑応答システムの意に反することなんですよ。分かりませんか? --  &new{2006-07-20 (木) 22:13:24};
-もっとはっきり言えば,聞きたいことを聞いて答えが得られたんだから良いじゃないかという考えの人は,質問なんかして欲しくない。この後質問しても,その人の質問には誰も答えない。 --  &new{2006-07-20 (木) 22:46:29};

#comment

**matrix のそれぞれの行から当てはまる列を選びたい・・・
>[[さら]] (2006-07-14 (金) 03:14:52)~
 one <- 1:5
 two <- 6:10
 temp <- cbind(one, two)
 
 > temp
      one two
 [1,]   1   6
 [2,]   2   7
 [3,]   3   8
 [4,]   4   9
 [5,]   5  10
という行列と
 w <- factor(c(0,0,1,0,1), labels=c('one', 'two'))
 > w
 [1] one one two one two
という temp の列に対応したファクターがあります。~
この w が one の時は one の値を、 two の時は two の値を摘出したいです。~
要するに結果は
 1 2 8 4 10
となります。~
これをループを使わずにスパッとやりたいのですが、なかなか思うようにいきません。お力添えをお願いします。~
//

-diag(temp[,c(w)]) という力技をみつけましたが・・・ -- [[さら]] &new{2006-07-14 (金) 03:40:32};
-temp[cbind(1:nrow(temp),w)] --  &new{2006-07-14 (金) 10:30:20};
//ちょと間違いがあったので,消去
-w を factor にしているのは,元のデータが 0/1 なのを,列を表す 1/2 にしているだけのようなので, w <- c(1,1,2,1,2) と単純に記述するようにすれば,以下のような化け物コードを作ることもできる。  --  &new{2006-07-14 (金) 18:03:20};
 temp[o[order((o <- which(col(temp)==w, arr.ind=TRUE))[,1]),]] 
 ******* 一般化 *****
 > ( x <- matrix(1:20, 5, 4) )
      [,1] [,2] [,3] [,4]
 [1,]    1    6   11   16
 [2,]    2    7   12   17
 [3,]    3    8   13   18
 [4,]    4    9   14   19
 [5,]    5   10   15   20
 > ( select <- c(2,1,3,1,4) )
 [1] 2 1 3 1 4
 > diag(x[, select])
 [1]  6  2 13  4 20
 > x[cbind(1:nrow(x), select)]
 [1]  6  2 13  4 20
 > x[o[order((o <- which(col(x)==select, arr.ind=TRUE))[,1]),]]
 [1]  6  2 13  4 20
-w <- c(0,0,1,0,1) とおいても差し支えないのなら(因子でないといけない理由がよくわからぬ) temp[,1]*(1-w)+temp[,2]*w でも良し。 --  &new{2006-07-15 (土) 01:13:36};
-本当のデータは因子でないといけなかったのですが、簡単な例に置き換えました。でも因子をただの数字に変えるのも簡単なので、いろんなやり方がありますね。どうもありがとうございました。 -- [[さら]] &new{2006-07-17 (月) 23:58:25};

#comment

**glとcの組み合わせ
>[[Katsura]] (2006-07-06 (木) 11:36:35)~
~
 glで生成した数列を2つつなげるときの質問です。
 gl(5,3,labels=1:5)
 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
 Levels: 1 2 3 4 5
 
 gl(5,3,labels=11:15)
 [1] 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15
 Levels: 11 12 13 14 15
 しかし、これをつなげようとして
 c(gl(5,3,labels=1:5),gl(5,3,labels=11:15))
とすると、
 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
となり、後半部のラベル指定が無効になっています。これは何故起こるのか、それを回避する方法について教えてください。~

//
-「11〜15」そのものの値を生成しているのではなく、「1〜5」という値を生成して、それぞれに「11〜15」というラベルをつけて表示しているのでは?
 > x <- gl(5,3,labels=11:15)
 > str(x)
 Factor w/ 5 levels "11","12","13",..: 1 1 1 2 2 2 3 3 3 4 ...
ですから、内部的には・・・
 > c(gl(5,3,labels=11:15))
  [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
回避する方法ですが、関数 rep() で「11〜15」そのものの値を生成しては如何でしょうか?--舟尾  &new{2006-07-06 (木) 13:01:03};
 > sort( c(rep(1:5,3),rep(11:15,3)) )
  [1]  1  1  1  2  2  2  3  3  3  4  4  4  5  5  5 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15
-as.factor(c(as.character(gl(5,3,labels=1:5)),as.character(gl(5,3,labels=11:15)))) --  &new{2006-07-06 (木) 13:41:39};
-皆様ありがとうございました。他の方法がいろいろとあったんですね。さっそく試してみます。 -- [[Katsura]] &new{2006-07-06 (木) 14:09:01};
-rep の each パラメータを使うと良いですね -- &new{2006-07-06 (木) 15:18:12};
 factor(c(rep(1:5,each=3),rep(11:15,each=3)))
または
 factor(rep(c(1:5, 11:15), each=3))
-なるほど。repにこんな使い方もあったんですね。勉強になりました。初心者ですがこれからもよろしくおねがいします。 -- [[Katsura]] &new{2006-07-06 (木) 16:04:12};

#comment

**xxx.tar.gzをWindowsで利用する方法について
>[[あざみ]] (2006-07-05 (水) 13:00:20)~
~
すでに超初心者さんが「ライブラリ」として4月3日に質問されているのですが、いろんな話題が出てきておりついていけませんでした.ある程度公共性もあると思うので,順を追って質問するために新しいスレッドを立てさせて頂きました.~
~
私が使用しているPCのOSは、Windows XPです.~
~
状況としては、アドオンパッケージであるRwaveを利用して、また別の分析をする“bivar”(http://www.agnld.uni-potsdam.de/~maraun/wavelets/)を利用しようと思っています.~
標準で.zipが用意されているRwaveについては、すでにインストールしています.しかし,作者のページでもbivarは、bivar_0.992.tar.gzという形でしか公開されていません.~
これをインストールしたいのですが、立ち往生しています.なかまさんが指摘したRtool.zipとMinGWが必要な点は理解しました.~
~
今の状態ははおそらく,Rについてというよりも,コンパイル,コンパイラについての知識不足に起因していると思います.何をキーワードとして検索していいかも分からない状態です.~
~
そこで,質問ですが,~
1.RTool.zipは,MinGWを使ってコンパイルするために必要なデータが入っているという認識で間違っていないでしょうか?~
2.Rとのかかわりの中で,開発環境の構築を説明したサイト,文献等はありますか?~
3.もしないとすれば,コンパイラに関して,少なくとも何を理解すればRの環境を構築できますか?~
4.また,その場合,オススメのサイト,文献等はありますか?~
~
以上,4点ご回答よろしくお願いします.~

//
-[[R Installation and Administration:http://cran.r-project.org/doc/manuals/R-admin.html]]読むと,Appendix F The Windows toolset とか書いてあります. さらに[[Rtools:http://www.murdoch-sutherland.com/Rtools/]]とかに詳しく書いてあります. tools.zipにはREADMEも含まれますから何が入っているかわかると思います. 必要な情報は網羅されてますから,迷わず構築出来ると思います...が,もしコンパイラなど普段は無関係な方なら付近に詳しそうな方が居ないか探した方が良いかもしれません. -- [[なかま]] &new{2006-07-06 (木) 13:09:11};
-いっそ、Linux に乗り換えると残る人生幸せに暮らせるかも(役たたずのコメント)。 --  &new{2006-07-06 (木) 15:03:50};
-同意見。 --  &new{2006-07-06 (木) 16:46:23};
-bivar の instllation を見ましたか? 本体はRだけで書かれているので, そこに bivar.R単体で置いてありましたし, インストールに関する親切なコメントまで書いてありました(中の人は親切すぎ...)が...ちゃんと読んでの事なのでしょうか.(^_^; tar.gzの中身はRのコードとドキュメントとデータが入っているだけなので, perlとtools.zipのパスを与えればよさそうですが. -- [[なかま]] &new{2006-07-06 (木) 17:45:56};
-早速の回答ありがとうございます。ここにご紹介頂いたものについては一通り目を通したのですが、予備知識がないのでどうしても理解できませんでした。すみません(*.*) ふだんコンパイラとは関わりのないところで生きるので、当面の解決方法としては、詳しそうな人を探すことにします。…入り口がWindowsだったので、これまで入るのに躊躇してきましたが、長期的にはLinuxに乗り換えるのもよいかと思いました。皆さんの意見に背中を押されて(^_^; とりあえず、ご連絡まで。解決したときには報告します。では -- [[あざみ]] &new{2006-07-07 (金) 17:38:02};
-この件に関しては一応解決しました.作成者の方がプログラム一式をbivar.Rというかたちで公開してくれていたので,ローカルの任意のフォルダに置いて,> source("xxx/bivar.R")とすることで利用できるようになりました.作成者のページにあったように,ヘルプ機能は利用できませんが,実用上は問題ありません.というわけで,今後xxx.tar.gzを使わざるを得ない状況に陥るまでに諸々の勉強とOSの乗り換えを考えてみたいと思っています.皆さんコメントありがとうございました. -- [[あざみ]] &new{2006-07-14 (金) 13:20:56};

#comment

**グラフpieで色の指定
>[[ぽこにゃん]] (2006-07-04 (火) 22:48:17)~
~
pieでグラフを書いているんですが、色の付け方で、わかんないとこがありまして・・・~
例えば、
 A <- c(1,1,1,1,3,3)
 B <- c(2,2,2,2,3,3)
として、
 pie(table(A) , col=c("red","blue","green"))
の要領で、両方ともグラフを作成すると、同じ色のグラフがでてしまいます。~
1の場合は"red"、2の場合は"blue"と、色と数字を関連づけることってできますか?~

//
-一つの思い付き。欠けた値があるから困るわけです。欠けた値を補い、しかもそれをほとんど比率ゼロにすればそれらしい図が描けます。ただし、?pie で説明を読むと piechart は使わない方が良いよとわざわざ注釈がありますね(笑)。 --  &new{2006-07-05 (水) 00:18:32};
 > AA <- c(rep(A, 10000),1,2,3)
 > pie(table(AA), col=c("red","blue","green"))
 > BB <- c(rep(B, 10000),1,2,3)
 > pie(table(BB), col=c("red","blue","green"))
-取る値が整数値であるとして(整数値以外の場合もほぼ同様?)
 pie(table(A), col=c("red","blue","green")[as.integer(names(table(A)))])
円グラフなどという奇妙なものが復活したのは,Excel のせいではないかな?~
パワーポイントの発表や発表資料なんかでも,やたらと円グラフが出てくる。 --  &new{2006-07-05 (水) 10:14:54};
-アドバイスありがとうございました。 -- [[ぽこにゃん]] &new{2006-07-05 (水) 23:11:27};
-上記二つとも大成功でした。いろいろ調べてみて、諦めかけてましたが、まだまだ勉強不足だったようです。 -- [[ぽこにゃん]] &new{2006-07-05 (水) 23:15:25};

#comment

**irisデータの出力
>[[zui]] (2006-07-03 (月) 18:43:14)~
~
参考: http://www1.doshisha.ac.jp/~mjin/R/23.html~
 > data(iris)
このように書くとirisデータを呼び出すことができます。このirisをテキストとして出力したいのです。~
 > write(iris,file="C:/irisdata.txt")
 以下にエラーcat(list(...), file, sep, fill, labels, append) : 
 argument 1 (type 'list') cannot be handled by 'cat'
上のようにwriteを使って出力しようと思うとエラーを返されてしまいます。どう改善するれば良いのかご指導ください。~

//
-writeでなくてwrite.tableとかwrite.csvにしては? --  &new{2006-07-03 (月) 19:24:18};
-最近では,data(iris) なんてしなくても良いですよ。いきなり iris って入力すると,わかります。 --  &new{2006-07-03 (月) 21:28:05};
-ありがとうございます。write.tableもwrite.csvもうまくいきました。自分の入力データもこれと同じフォーマットで作成して、実験してみようと思います。 -- [[zui]] &new{2006-07-04 (火) 00:46:53};
-因みにお試しの方法が失敗したのは、iris は実体がリストであるデータフレーム(とくに文字の列を含む)だからです。単なる数値行列なら write でもうまくいくはず。 --  &new{2006-07-04 (火) 01:20:34};
-なるほど!そういうことだったのですね。原因も分かってスッキリしました。ありがとうございます。 -- [[zui]] &new{2006-07-04 (火) 02:52:56};

#comment

**バックスラッシュと円マーク
>[[まっくん]] (2006-07-02 (日) 22:15:53)~
~
R コンソールに直接入力するときに,円マークキーを入力すると,文字通り円マークが入り,バックスラッシュの働きをしません。
 > cat(1,2,3,"?n",321)
 1 2 3 ?n 321
別の環境ではちゃんとバックスラッシュが入力され,期待通り改行されるのですが,設定のどこが違うのか,見当がつきません。

//
-使用環境(それとバージョン情報)をまず書きましょう。別の環境とやらについても同様。 --  &new{2006-07-02 (日) 23:59:15};
-書くのを忘れていました。すみませんでした。
 Mac OS 10.4.7 で
 > sessionInfo() 
 Version 2.3.1 (2006-06-01) 
 powerpc-apple-darwin8.6.0 
 attached base packages:
 [1] "methods"   "stats"     "graphics"  "grDevices"
 [5] "utils"     "datasets"  "base"     
他の環境というのは,OS も同じ,Mac ということです。 --  &new{2006-07-03 (月) 05:11:19};

#comment

**predict (type="class")の使い方
>[[zui]] (2006-06-30 (金) 15:21:37)~
~
昨日からRについて調べ始め、スクリプトを書いてみています。~
nnetを使って2クラス問題を学習し、predictでどちらのクラスに分類されるかを実験したいと考えています。入力データはCSVテキスト形式で、教師信号として0と1のどちらかが記述されているものを使います。~
学習は収束して無事に完了しますが、そのあとpredictを用いてクラス分類の結果を出力しようとしてもうまくいきません。おそらく、テキストで与えてある0と1の教師信号をクラス分類のための要素であると指定してあげなければいけないのだと思うのですが、その方法が分かりません。~
助言を賜りたくお願い申し上げます。~
自分の書いているスクリプトを載せておきます。間違いがありましたら指摘してくださると幸いです。
 library(nnet)
 s=20
 it=1000
 X=read.table("train1645.txt")
 num=dim(X)[2]-1
 set.seed(1)
 w=runif((num+1)*s+(s+1),min=-0.1,max=0.1)
 X[,1]=factor(X[,1])
 mynet=nnet(X[,-1],X[,1],Wts=w,size=s,maxit=it,decay=0.1)
 Y=read.table("test823.txt")
 result=predict(mynet,Y[,-1],type="class")
 table(Y[,1],result)

//
-すいません。上のスクリプトの8行目の X[,1]=factor(X[,1]) は「こんなふうにすればいいのかな?」と試しに入れてみたもので、その行を書かなければ学習はうまくいっていました。試行錯誤中です。 -- [[zui]] &new{2006-06-30 (金) 15:41:11};
-train1645.txt と test823.txt がないので,貴方がどのように適切にそれらを利用できているかもわかりません。状況が再現できる最小限のデータ環境と併せて質問しないと,回答の可能性が低くなるのではないかと危惧します。できればファイルを読んだりするのではなく,プログラム中で定義するなりの工夫があれば,モアベター(フルッ)。[[簡単な投稿法]]の dput 等も参考に。 --  &new{2006-06-30 (金) 16:35:29};
-なぜ type="class" でないといけないのかもわからない素人ですが,type="raw" だと動きませんか?--  &new{2006-06-30 (金) 17:08:41};
 > library(nnet)
 > s=20
 > it=1000
 > X=data.frame(g=rep(0:1, each=6), 
 + x1=c(5,0,4,8,2,2,10,7,9,5,9,5), 
 + x2=c(10,7,7,6,5,4,8,7,5,3,2,2))
 > num=dim(X)[2]-1
 > set.seed(1)
 > w=runif((num+1)*s+(s+1),min=-0.1,max=0.1)
 > mynet=nnet(X[,-1],X[,1],Wts=w,size=s,maxit=it,decay=0.1)
 # weights:  81
 initial  value 3.052515 
 iter  10 value 1.724419
 iter  20 value 1.678060
 iter  30 value 1.671664
 iter  40 value 1.670122
 final  value 1.670113 
 converged
 > Y=data.frame(g=c(0,1,1), x1=c(1,7,5), x2=c(3,6,5))
 > result=predict(mynet,Y[,-1],type="raw")
 > table(Y[,1],result)
    result
     0.238989942603598 0.516324646822477 0.656391116225453
   0                 1                 0                 0
   1                 0                 1                 1
-ありがとうございます。上を参考にしてtype="raw"にしたら動いてくれました。「引数typeを"raw"に指定すると当てはめの値を返し、"class"に指定すると対応するグループ(判別分析のグループ)に関する値を返す。」と説明があるのですけれど、この「当てはめの値」とは上でいうと少数が並んでいる値のことですか?tableの見方が分からないので教えてください。 -- [[zui]] &new{2006-06-30 (金) 19:26:40};
-#URL:http://www.filebank.co.jp/guest/youun/data #login-pass:data ここに私が用いるトレーニングデータとテストデータをアップしておきました。各行の一番最初の値(0か1)が教師信号で、それ以外が入力値です。テストデータで0か1かの判別(予測?)が目標です。 -- [[zui]] &new{2006-06-30 (金) 20:22:35};
-table は単に集計するだけですから(あんまりよいサマリーではないが)。オンラインヘルプなり関数の説明なりをよくお読みになることをお勧めします。他人事では,身を入れて問題解決しようと思う人は希有なのですよ。 --  &new{2006-06-30 (金) 21:03:17};
-その URL って,使いにくいし,「再現に必要最小限」でもないので,扱いにくいのでは?私は,これにて,ごめん。 --  &new{2006-06-30 (金) 21:14:25};
-http://www.borujoa.org/upload/source/upload6580.txt irisデータベースです。C4.5形式で、各行の一番最後の値(0,1,2)を教師信号として分類をする場合はどういう記述になるのでしょうか? http://www1.doshisha.ac.jp/~mjin/R/23.html このリンク先ではRに含まれているirisデータベースを使っているみたいなので、テキストで入力と教師信号を与えて学習、分類するにはどうすればいいのか...。本当は1として出力して欲しいところで1と出力したのが何個で、0と出力してしまったのが何個か。それが分かれば万々歳です。 -- [[zui]] &new{2006-07-01 (土) 06:09:19};

#comment

**lm()の引数formulaをデータフレームのタイトルから作り出す方法は?
>[[sakimura]] (2006-06-30 (金) 15:04:48)~
~
lm()を用いて重回帰分析をやろうとしていますが、説明変数が多いので、元データのデータフレームの行タイトルからlm()の引数formulaに与える文字列を作り出そうと試みています。~
元データのデータフレームdfは、1から59列目に説明変数x1からx59、60列目に目的変数yが入っており、1行目に各列のタイトル"x1"から"x59"および"y"が書かれているcsvファイルを、read.csv()を使って読み込んだものです。~
このデータフレームから以下の処理によって、lm()の引数formulaに渡したい文字列である"y ~ x1+x2+x3+...+x59"という文字列を生成するところまではうまくいきました。
 cname <- colnames(df)
 objval <- cname[length(cname)]
 numexvals <- length(cname)-1
 exvals <- paste(cname[1:numexvals], collapse="+")
 strformula <- paste(objval, "~", exvals)
ところが、いざlm()へ渡そうとする際にうまくいきません。~
具体的には、~
 lm(paste(strformula), data=df)
と入力すると、~
 以下にエラーterms.default(formula, data = data) :
        terms 成分がありません
というエラーが返ってきてしまいます。~
なお、当方の使用環境は、sessionInfo()で調べたところ、
 R version 2.2.0, 2005-10-06, i386-pc-mingw32
 attached base packages:
 [1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"
 [7] "base"  
とのことでした。~
Rについても統計についても初心者で、調べ方もよくわからずほとほと困っています。~
識者の方々のご助言をいただけると非常に助かります。~
よろしくお願いいたします。~

//
-lm(eval(parse(text=strformula)), data=df) -- [[takahashi]] &new{2006-06-30 (金) 15:22:38};
-evalとparseを組み合わせて使うといいんですね!うまくいきました(^o^)。takahashi様、ありがとうございました。 -- [[sakimura]] &new{2006-06-30 (金) 15:39:49};

#comment

**Windows XPでの日本語のインライン入力
>[[ショーゾー]] (2006-06-27 (火) 11:37:44)~
~
マック使いですが,友人のWindows XP サービスパック2で動いているマシンにR 2.3.1をインストールしたのですが,日本語を入力する時にインライン入力ができません。別のマシンでも試したのですが,同様です。入力システムはXP附属のものでATOKなど使っていません。Rの質問でなくXPの質問になったらすみません。~

//
-IMEの制御にimm32.dllを呼ばねばならず. 9x系では世界中のWinには無いので,当初から対応しませんでした. 9xのサポートが無くなったら考えようかと思います.imm32(そのうち64なのか...)は2000以降標準だったと思います. -- [[なかま]] &new{2006-06-27 (火) 12:09:47};
-確かに2.3.0まではコンソールウィンドウの左上に変換文字列が出ますが --  &new{2006-06-27 (火) 22:55:56};
-2.3.1からは別のIMEウィンドウの中に変換文字列が出てくるようになってますね。(Win版) --  &new{2006-06-27 (火) 22:57:24};
-Rguiを再起動するとコンソールウィンドウの左上に出るようになりました(何故?) --  &new{2006-06-27 (火) 23:07:26};
-GUIプリファレンスでコンソールウィンドウサイズを変えた直後は、またIMEウィンドウになりますね。 --  &new{2006-06-27 (火) 23:10:35};
-あー(T_T),初期化しないから形態が不定になるんですねぇ. SDIなら我慢できるかも... immの世界史調べてハックしてみます...(すぐには出来そうもないんだけど...すんません) -- [[なかま]] &new{2006-06-28 (水) 09:59:30};
-R Editor(ファイルの新しいスクリプトで開きます)で入力して選択部分を実行にすればいいんでは?(選択しないでカーソル行を実行させようとすると何故か文字化けしますが) -- [[中澤]] &new{2006-06-28 (水) 12:52:41};
-これはまた微妙な情報ありがとうございます(気づかなかった...)orz -- [[なかま]] &new{2006-06-28 (水) 13:39:52};
-そうでしたか。Windowsではインライン入力できないのが現時点での標準仕様なんですね。 -- [[ショーゾー]] &new{2006-06-28 (水) 15:39:50};
-変換中の文字列のフォントが大きいのも仕様なんでしょうか?インラインでできないのは仕様として、IMEウィンドウ入力をカレント行の下に自動的にロケーションできると嬉しいかも。 --  &new{2006-06-28 (水) 18:02:02};

#comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS