No.05829 Re: R 超初心者 【青木繁伸】 2008/02/14(Thu) 00:35
R は,ファイルの入出力はデフォルトのディレクトリを対象に行います。
特定のディレクトリを対象にする (そこにあるファイルから読んだり,そこにファイルを作って結果を書き出す)には,Windows の場合は,メニューバーで「ファイル」→「ディレクトリの変更...」を選び,希望するディレクトリを選択してください。Macintosh の場合は,「その他」→「作業ディレクトリの変更」です。
ファイルを対話的に開くには,
df <- read.table(file.choose(), header=FALSE)
のようにすると良いでしょう。見慣れたやり方で,入力ファイルを指定できます。(これが一番お勧めかも。。なれるとまだるっこしくなるが)
入出力ファイルをデフォルトディレクトリに置いておくとか,デフォルトディレクトリを変更するとか,パス名を指定してファイルを指定するとか,やり方はいろいろあります。
No.05835 Re: R 超初心者 【てつや】 2008/02/14(Thu) 12:15
青木様
早速の対応ありがとうございます。
うまく読み込めました。
file.choose()を使わないとまだ無理ですけど。Windowsなのでツールバーから作業ディレクトリを変更して,このディレクトリの中にファイルを入れているのですが,なぜかエラーになってしまいます。
また,AとBの2群のデータを区切りテキストで保存して,
df <- read.table(file.choose(), header=TRUE)
で読み込み青木先生のソースを使ってマンホイットニーのU検定を行おうとしたのですが,
U.test(A,B)
以下にエラー U.test(A, B) : オブジェクト "B" は存在しません
となってしまいました。今回はそれぞれの群を別テキストに保存して,対処しました。
・・・ここまでは,今後勉強していけば何とかなるのかなと思ってはいるのですが,標本数がA:89437, B:74160のデータでU検定を行うと
> U.test(A, B, correct=FALSE)
U E(U) V(U) Z P value
NA NA NA NA NA
Warning messages:
1: In n1 * n2 : 整数の桁あふれにより NA が生成されました
2: In n1 * n2 : 整数の桁あふれにより NA が生成されました
3: In n1 * n2 : 整数の桁あふれにより NA が生成されました
4: In n1 * n2 : 整数の桁あふれにより NA が生成されました
となってしまいました。まさかこれは大規模データにRが対応できないということではないですよね。
ちなみに
wilcox.test(A, B, correct=FALSE)
以下にエラー wilcox.test.default(A, B, correct = FALSE) :
'x' は数値でなければなりません
となってしまいました(笑)意味不明なので今後勉強します。
No.05838 Re: R 超初心者 【青木繁伸】 2008/02/14(Thu) 13:25
> file.choose()を使わないとまだ無理ですけど。Windowsなのでツールバーから作業ディレクトリを変更して,このディレクトリの中にファイルを入れているのですが,なぜかエラーになってしまいます。
ディ レクトリを変更してから,たとえば x <- 123; write(x, file="test.dat") を実行したとき,そのディレクトリに test.dat というファイルができますか?できたとして,次に scan("test.dat") を実行したとき 123 が読み取られますか?
> AとBの2群のデータを区切りテキストで保存して,df <- read.table(file.choose(), header=TRUE)
A,B の入っているファイルの中身はデータフレームの形式をしていますか?
> U.test(A,B)
> 以下にエラー U.test(A, B) : オブジェクト "B" は存在しません
上の例で言えば,A,B 二群のデータは df というデータフレームに読み込んだのですから,A 群のデータが A という名前の列,B 群のデータは B という名前の列に用意されていたのなら,U.test(df$A, df$B) としないといけませんよ?
> まさかこれは大規模データにRが対応できないということではないですよね。
その,「まさか」です。プログラム中で n1*n2 などという部分がありますが,それらは整数演算されるように書かれているので,n1, n2 が扱える整数範囲内であっても,結果が整数範囲をはみ出すことがあります。ようするに「整数の桁あふれ」です。
> wilcox.test(A, B, correct=FALSE)
> 以下にエラー wilcox.test.default(A, B, correct = FALSE) :
> 'x' は数値でなければなりません
これは上に書いたのと同じですが,wilcox.test(df$A, df$B, correct=FALSE) と書かないといけなくはないですか?
たとえば,コンソールに単に A と入力したら,A 群のデータが表示されますか?
表示されたデータ中に数値以外のものはないですか?たとえ1こであっても,数値以外のものが入っているとデータは factor というものに変換されて読み込まれています。そうすると,wilcox.test プログラムは処理をすることができません。
R がはじめてと言うことですが,基本的なところは必要ですので,チェックしておいてください。
参考書を購入するのがよいでしょうが,
http://aoki2.si.gunma-u.ac.jp/R/Rstat.pdf
の第2章あたりの知識は必要だと思います。
No.05842 Re: R 超初心者 【てつや】 2008/02/14(Thu) 21:08
青木様
詳細な回答をありがとうございます。
一つ解決しました。
> df <- read.table(file.choose(), header=TRUE)
> wilcox.test(df$A, df$B, correct=FALSE)
Wilcoxon rank sum test
data: df$A and df$B
W = 4256775475, p-value < 2.2e-16
alternative hypothesis: true location shift is not equal to 0
しかし,2群をそれぞれテキストに保存したものからデータを取り込むと
> A <- read.table(file.choose(), header=TRUE)
> B <- read.table(file.choose(), header=TRUE)
> wilcox.test(A, B, correct=FALSE)
以下にエラー wilcox.test.default(A, B, correct = FALSE) :
'x' は数値でなければなりません
となってうまくいきませんでした。
また,file.choose()を使用しないデータの読み込みについては,ディレクトリを変更した後に
> x <- 123; write(x, file="test.dat")
を実行し,そのディレクトリに test.dat というファイルができたことを確認しました。
その後に
> scan("test.dat") を実行して
Read 1 item
[1] 123
となりました。
しかし,その後は
> Y <- read.table("test", header=TRUE)
以下にエラー file(file, "r") : コネクションを開くことができません
追加情報: Warning message:
In file(file, "r") :
ファイル 'test' を開くことができません, 理由は 'No such file or directory' です
となってまたもやうまくいきませんでした。
マウス操作に慣れているとRは使いづらいですね。
「Rによるデータ解析」読ませていただきます。
No.05845 Re: R 超初心者 【青木繁伸】 2008/02/14(Thu) 23:00
マウスで R をやるなら,Rcmdr(R コマンダー)をやるのがよいかも
(でも,R コマンダーは,R の能力の一体どれくらいを発揮できているのだろうか??)
>しかし,2群をそれぞれテキストに保存したものからデータを取り込むと
>> A <- read.table(file.choose(), header=TRUE)
>> B <- read.table(file.choose(), header=TRUE)
>> wilcox.test(A, B, correct=FALSE)
> 以下にエラー wilcox.test.default(A, B, correct = FALSE) :
> 'x' は数値でなければなりません
> となってうまくいきませんでした。
その時点で A, B はどうなっていますか?A, B はデータフレームでしょう?
だったら wilcox.test の引数に A や B を与えてもそれは無理でしょう
その時点で str(A) とやるとどのように表示されますか?
> しかし,その後は
> > Y <- read.table("test", header=TRUE)
> 以下にエラー file(file, "r") : コネクションを開くことができません
> 追加情報: Warning message:
> In file(file, "r") :
> ファイル 'test' を開くことができません, 理由は 'No such file or directory' です
read.table のファイル名で,なぜ "test" を指定するのですか?
データファイル名は test.dat なのですから "test.dat" とすべきでしょう。
また,今のテスト例では,ファイルには1つの数値しか入っていないので,変数名はないのですから read.table で header=TRUE を指定することはできないでしょう。指定するなら header=FALSE です。
ファイルを読み込むのに scan を使うのも,read.table を使うのも,その他の関数を使うのも,同じではないのです(それぞれ別の形式で読むことを意味します)
それぞれの読み方において,オプションもそれぞれの意味を持ちます。闇雲にオプションを指示しても無意味です。
難しいと言えば難しいですが,何も分からない状態でやろうとすれば難しいのは当たり前です。
このようなデータファイルの形式ならこの関数を使う,
この関数が読めるデータファイルはこのような形式(オプション)でなければいけない
というのは,制限・制約・面倒な決めごとではなく,必然なのです。
No.05846 Re: R 超初心者 【てつや】 2008/02/14(Thu) 23:59
>read.table のファイル名で,なぜ "test" を指定するのですか?
完全なミスです。わざわざ対応して頂いたのに本当にすみません。
>その時点で str(A) とやるとどのように表示されますか?
> str(A)
'data.frame': 89437 obs. of 1 variable:
$ A: num 0.00 1.47 2.83 4.10 5.57 ...
ちなみに
> str(B)
'data.frame': 74160 obs. of 1 variable:
$ B: num 93.4 93.9 94.3 94.8 95.4 ...
ということで
> A <- read.table("A.txt", header=TRUE)
> B <- read.table("B.txt", header=TRUE)
> wilcox.test(A$A, B$B, correct=FALSE)
Wilcoxon rank sum test
data: A$A and B$B
W = 4256775475, p-value < 2.2e-16
alternative hypothesis: true location shift is not equal to 0
となりました。
>header=TRUE を指定することはできないでしょう。指定するなら header=FALSE です。
少しずつおぼえていきます。
● 「統計学関連なんでもあり」の過去ログ--- 041 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る