統計解析フリーソフト R 【第3章】
at MATH
654:132人目の素数さん
10/06/03 10:12:21
>>652
>>653の言うとおりlistを使えばよいと思う。
> a <- lapply(1:10,function(x){runif(2)})
> a[[1]]
[1] 0.02104710 0.54894781
> a[[2]]
[1] 0.3112974 0.5590326
> a[[10]]
[1] 0.1201111 0.7264913
という乱数が2個ずつ入った変数があったとしたら、
> a
[[1]]
[1] 0.02104710 0.54894781
[[2]]
[1] 0.3112974 0.5590326
[[3]]
[1] 0.09237121 0.45438306
[中略]
[[10]]
[1] 0.1201111 0.7264913
で中身が表示される。通し番号 1, 2, 3, ... 10の代わりに、[[1]], [[2]], [[3]],...,[[10]]
と考えればOKじゃないかな。
655:635
10/06/03 13:56:58
>>653
>>654
オーなーるほど。
早速の回答ありがとうございました。
変数の扱い方自体の考え方が違うんですね。
しかし、Rは懐が深いですね。
656:635
10/06/03 17:17:10
いろいろ勉強になります。
少し疑問があるのですが、
リストとデータフレームの違いがイマイチ良く理解できていません。
データフレームはいわゆるエクセルなどのスプレッドシート上のデータ群と
理解しています。
リストはデータフレームよりもフレキシブルなんでしょうか?
リストからデータフレームに変換するのには次の方法で良いのでしょうか?
>x <- list(4:6,7:9,10:12)
>x <-data.frame(x)
宜しくお願い致します。
657:132人目の素数さん
10/06/03 17:48:52
>>656
そのあたりの超入門的なことは、入門書を一読してから尋ねた方がいいと思う。
購入がいやならオンラインでもいろいろとある。
> リストからデータフレームに変換するのには次の方法で良いのでしょうか?
こんなことを聞かれても、欲しいデータフレームがどういうものか見せてくれないと、
答えようがないし、list構造の概念を理解していないからこそ発せられる質問だと思うよ。
> as.data.frame(x)
X4.6 X7.9 X10.12
1 4 7 10
2 5 8 11
3 6 9 12
> as.data.frame(unlist(x))
unlist(x)
1 4
2 5
3 6
4 7
5 8
6 9
7 10
8 11
9 12
どっちもデータフレームだよ。
658:635
10/06/03 18:58:57
>>657
オンラインのものは、- 統計解析ソフトR の備忘録PDF -とか、Rjpwikiとかは一通り読みました。
まだちゃんとは読んでいませんが、英語のR本も何冊か持っています。
今のところの体感認識では、
データフレームは、Rデータエディタで表示すると、きれいにスプレッドシートとして表示される。
リストは、そうでない。
また、リストはリストそのものも要素に扱えるということから、
雑多なデータを寄せ集めて表現しているものという認識で間違っていないでしょうか?
つまり、
データフレーム形式では、行・列の2次元でデータに意味付けされている。
リストでは、そういう縛りがない。
いろいろ丁寧に教えていただき勉強になっています。
ありがとうございます。
659:635
10/06/03 19:18:16
今Rで試してみましたが、
リストはデータフレームそのものも要素になりうるんですね。
リストにデータフレームを1から5まで読み込んで、ひとつのデータフレームにまとめたいときに
>newdataframe<-as.data.frame(original_list)
>newdataframe<-merge(original_list[[1:5]])
上記二つの方法が出来ることがわかりました。
二番目の方法では、列データがまるまる重複するデータは自動的に削除されるので
二番目の方法の方が扱いやすいのかと理解しています。
他の方法などあれば、また教えて下さい。
660:635
10/06/04 12:34:01
自己レスです。
merge()関数は二つのデータフレームしか結合できないようなので、
>newdataframe<-original_list[[1]]
>for(i in 2:5){newdataframe <- merge(newdataframe, original_list[[i]])}
が正しいようでした。
661:132人目の素数さん
10/06/06 11:29:56
Rでのgrepの使い方がいまいちわからん
662:132人目の素数さん
10/06/11 03:23:47
age
663:132人目の素数さん
10/06/12 12:16:16
すみません。助けてください。
下記コマンドでエクセルからデータを取り込みました。
library(foreign)
db <- read.xls("sample.xls", sheet=1)
すると
str(db)
'data.frame': 35 obs. of 38 variables:
$ NO : int 1 2 3 4 5 6 7 8 9 10 ...
$ ID : Factor w/ 35 levels "AA001","AB002",..: 29..
で確かめると要素が文字列(つまりchr)であることが期待された変数IDは、
上記のように因子レベルになっています。
数値を因子に直す方法は、factor(変数名,levels=,labels=c("",""))を使うことは分かったのですが、
因子を文字列に直す方法が分かりません。
宜しくお願い致します。
664:132人目の素数さん
10/06/13 04:29:43
>>663
as.characterでよくね?
665:132人目の素数さん
10/06/15 00:07:36
R+freeBSD環境でインストールしているのですが、
2時間掛かっているのに終わりません。
こんなに時間が掛かるものなのでしょうか?
666:132人目の素数さん
10/06/15 09:58:16
>>665
そんなのマシンによるだろ。
依存ライブラリのコンパイルもしているだろうから、
依存ライブラリが予め入っていないなら+αの時間がかかるし
667:132人目の素数さん
10/06/16 02:40:13
データフレーム(の中身)をsshで別のマシンに送りたいのですが、どうすればいいでしょうか?
> c1<-rnorm(1024);
> x<-data.frame(c1=c1);
> write.csv(x,file="/tmp/data.csv");
> system("cat /tmp/data.csv | ssh user@server.com \"command line\"");
user@server.com's password:
>
これで一応転送は出来てるのですが、最初のwrite.csvをやらないようにしたい
のですが、やり方がわかりません。出力先をパイプにすればいいのでしょうか?
どうかよろしくお願いします。
668:132人目の素数さん
10/06/16 02:55:12
> sshOut<-pipe('ssh user@server.com \"command line\" &> /tmp/sshOut', open='w');
とかやると出来そうな雰囲気もあるのですが、パイプに出力をうまくかけません。
669:132人目の素数さん
10/06/17 11:42:06
流れを読まずに質問
rownameが付いたデータがあります。
as.vectorでもas.listでもfalseになるので型がよく判りませんが、
数値の入った一次元配列?です。
データが1以下の行は使わないので、0とかNAにしましたが、
そのあとの計算で邪魔になってします。
データが1以下の行を削除するには、どうしたらいいのでしょうか?
調べても判らなかったので、ここを見ろ、でも有り難いです。
670:132人目の素数さん
10/06/17 13:04:09
よくわからないけど
> a <- (1:4)/2
> a
[1] 0.5 1.0 1.5 2.0
> a[a>1]
[1] 1.5 2.0
こういうこと?
671:669
10/06/17 21:34:05
>>670
有難う御座います。
672:132人目の素数さん
10/06/23 14:34:40
質問です。ご回答お願いします。
10行2列のマトリックスAと20行2列のマトリックスBを使って
回帰分析を行いたいんですが、エラーが出ます。
具体的には、A,Bの一列目を従属変数(濃度)、二列目を独立変数(スペクトル)にしてます。
関数lmを使ってAで作った検量線に、関数predictを使ってBの二列目を代入したい
(スペクトルの値から濃度を予測したい)と考えているのですが、
「データ数が違う」という旨の警告が出てできません。
分かりにくいかもしれませんが、宜しくお願いします。
673:132人目の素数さん
10/06/23 15:33:28
>>672
Rjpwikiの方が親切に回答してもらえると思うぞ。
> A <- data.frame(matrix(1:20,nrow=10))
> head(A)
X1 X2
1 1 11
2 2 12
3 3 13
4 4 14
5 5 15
6 6 16
> B <- data.frame(matrix(runif(40),nrow=20))
> head(B)
X1 X2
1 0.6353921 0.2679418
2 0.2917369 0.3124313
3 0.2857031 0.2795522
4 0.1951349 0.4510532
5 0.4426567 0.4894139
6 0.5981174 0.3142484
> predict(lm(X1~X2,A),B)
1 2 3 4 5 6 7 8
-9.732058 -9.687569 -9.720448 -9.548947 -9.510586 -9.685752 -9.718648 -9.481105
9 10 11 12 13 14 15 16
-9.477939 -9.628372 -9.697301 -9.711742 -9.717192 -9.791366 -9.910725 -9.650475
17 18 19 20
-9.903119 -9.638157 -9.547609 -9.051490
ってこと?具体的なコード(再現性のあるサンプルコード)を示してくれないと、
なんで出来ないのかこちらには分からない。
674:132人目の素数さん
10/07/04 01:35:42
nnet使ってるけど、これって出力層のユニット数は変更できないの?
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4684日前に更新/202 KB
担当:undef