統計解析R たぶんpart3くらい
>次に、C言語の配列がなく、
>リストを配列と呼んでいるらしい
漏れの勘違い
Rのベクトルは、C言語の静的配列で、
同じデータ型の要素が並ぶもの
Rのリストは、C言語の構造体で、
異なるデータ型の要素が並ぶもの
Rのデータフレームは、Rのリストの集積
「アート・オブ・R・プログラミング」を読んでいるが、
オライリーの本は外人なので、
わかりにくいし、疲れる。時間のムダ
アンクの絵本みたいに、
図で表示すればすぐわかるのに >>58
数値計算専用のFortranは列指向なわけだが 68みたいに何の素養もないボケがRを使うような機会ってあるの? ひょっとして手当たりしだいに履歴書だせば、Rでデータ解析するような仕事に付けるの? 3相因子分析をRでできると聞いたのですが専用のパッケージがあるのでしょうか?
よろしくお願いいたします。 やはりそのようなパッケージはないということでしょうか? >>76
Tucker法とかなら、ThreeWayパッケージ ご返答ありがとうございます
three Wayパッケージについて調べてみたいと思います。 ・グラフを重ねて描画
・グラフを並べて描画
この2つの両立は可能でしょうか?
以下の様な流れのコードで、可能かと思ったのですが、
ひとつのグラフエリアに全グラフを出力してしまい、実現できませんでした。
よろしくお願いします。
//描画領域を1行4列に
jpg('test.jpg')
par(mfcol=c(1,4))
//4回繰り返す
while(4回繰り返す){
//1つのグラフに、3本の線を描画
while(3回繰り返す){
par(new=T)
hogehoge = 描画したいデータ
plot(hogehoge,type="l")
}
}
//画像ファイル出力
dev.off() >>79
> ・グラフを重ねて描画
> ・グラフを並べて描画
> この2つの両立は可能でしょうか?
可能と言えば可能。
ただし、1つのグラフに、3本の線≠グラフを重ねること
複数の折れ線グラフを描画するときには、
plot()で軸などを描画した後に、lines()で線を描くのが基本。
matplot()を使うのもあり。
plot(runif(10), runif(10), type = "l")
lines(runif(10), runif(10), lty = 2, col = 2)
lines(runif(10), runif(10), lty = 3, col = 3)
これを1行4列に
op <- par(mfcol=c(1,4))
sapply(1:4, function(i){
hogehoge <- as.data.frame(x = runif(30), y = runif(30))
plot(hogehoge[1:10, ], type = "l")
lines(hogehoge[11:20, ], lty = 2, col = 2)
lines(hogehoge[21:30, ], lty = 3, col = 3)
})
par(op)
みないな感じにする。
なお、// のコメント禁止。代入に=を使うのは禁止。
初心者はpar(new=T)の使用禁止。
while()も真にやむを得ない場合以外は避ける(回数が決まっているループに使うのはもってのほか)。 画像ファイル形式に、表(行列)を出力する方法ってありますか?
無ければデータフレームをwriteでcsvに書き出して、スクショとってペイント切り貼りなので、
できれば避けたいです・・・ gridExtraパッケージのgrid.table()でいける >>82
質問者じゃないけど、参考になった。
複雑な図にたくさんの数字ラベルをつけて、
横に数字とラベル名の対照表を簡単につけられないかと長年考えていたが、
これなら簡単そうだな。
op <- par(mfrow = c(1,2))
x <- data.frame(x = runif(10), y = runif(10))
plot(x, cex=2)
i <- 1:10
text(x, as.character(i))
grid.table(data.frame(Month = month.name[i]))
par(op)
だが、古典グラフィックとGridの共存がうまくいかないw 突っ込まれる前に追記。
もちろん、下記のようにすれば、ある程度実現することは分かっているけど、
ちゃんとレイアウトされた表にすることが難しい
x <- data.frame(x = runif(10), y = runif(10))
plot(x, xlim = c(0, 1.5), cex=2)
i <- 1:10
text(x, as.character(i))
legend("topright", paste(formatC(1:10, width=2),
month.name[i]), title = "Month", bty = "n") >>82
ありがとうございます。
無事表示できました
贅沢を言えば、
>>83の方が言うように
既存のplotと共存させてなくなってきました。
ライブラリを読みましたが、既存のplotとの共存はできないのでしょうか
@A
@プロットしたグラフ
Aその値の表 >>85
古典グラフィックと混載するのではなく、
全てをGrid化して制御すれば、自由自在に描画できると思うよ。
とりあえず、viewport()を勉強してくれ
ちょっと長くなるけど、下記のコードは期待通りになった。
library(gridExtra)
grid.newpage()
pushViewport(viewport(x = 0, width = 0.8, just="left"))
pushViewport(plotViewport())
grid.rect(); grid.xaxis(); grid.yaxis()
x <- runif(10); y <- runif(10)
grid.points(x, y, size = unit(1.5, "char"))
grid.text(as.character(1:10), x = x, y = y)
grid.text("Grid test plot", y = unit(1, "npc") + unit(2, "lines"))
popViewport()
pushViewport(viewport(x = 1.2, width = .2, just = "right"))
grid.table(data.frame(Month = month.name[1:10])) RのクラスってC言語上でクラスを作るみたいなもんだな pygmentsを使ってみたが、
$ pygmentize -N tmp.R
splus
$ pygmentize -N tmp.r
rebol
拡張子が小文字だとREBOLと認識される模様。 代入にほとんど<-が使われていますが、
=を<-と同じとして使ってよいのでしょうか? >>90
だめ。意味が違うし、結果が異なる場合もある。
ベテランでも<-にすべきところで=を使っている人もいるので、
混乱すると思うけど、S言語の仕様に従った方が間違いがない。
<-と=で結果が変わってしまう例:
> (x <- 9:11)
[1] 9 10 11
> mean(x = 1:3); mean(x)
[1] 2
[1] 10
> mean(x <- 1:3); mean(x)
[1] 2
[1] 2
> x
[1] 1 2 3
引数に<-を使うと、mean(x)の値が予期せず変わってしまう。
9,10,11の平均値を2として論文に書いてしまう人はいないだろうが、
複雑な計算だったら、気がつかずにそのまま解析結果にしてしまうかも知れない。 >>91
ありがとうございました
最近勉強始めたのですが、教えていただけなければ全部=で覚えるところでした
また機会ありましたらよろしくおねがいします ちょっとお聞きしたいのですが、
x y z f
1 1 1 f1
1 1 2 f2
1 1 3 ・・
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
・・
のようなデータがあって、
例えばzが1だけのx,y,fだけで3次元サーフェスプロットを書きたいのですが、
Rだとそういったことはもしかしてできたりしますでしょうか?
(可能なら他のz=2,z=3でのサーフェスプロットも同時に表示するなど・・)
突然ですいませんがもしよろしければご教示いただけると幸いです >>93
> dat <- data.frame(expand.grid(1:3, 1:3, 1:2)[,3:1], as.factor(paste0("f",1:18)))
> names(dat) <- c("x", "y", "z", "f")
> dat
x y z f
1 1 1 1 f1
2 1 1 2 f2
3 1 1 3 f3
4 1 2 1 f4
5 1 2 2 f5
6 1 2 3 f6
[中略]
17 2 3 2 f17
18 2 3 3 f18
というデータがあったとして、
> (dat1 <- dat[dat$z == 1, ])
x y z f
1 1 1 1 f1
4 1 2 1 f4
7 1 3 1 f7
10 2 1 1 f10
13 2 2 1 f13
16 2 3 1 f16
とすればzが1だけのデータになる。これを行をx、列をyとしたときのfの行列を作成してpersp()で表示すればよい。
> m <- matrix(NA, nrow = max(dat1$x), ncol = max(dat1$y))
> for(i in 1:nrow(dat1)){m[dat1[i, 1], dat1[i, 2]] <- dat1[i, 4]}
> persp(m)
factor型のfを強制的に整数型にしているけど、適宜、自分の思うとおりにアレンジしてくれ。 >>94-96
ありがとうございました
特に具体的なやり方まで教えていただき、感謝です
試させていただこうと思います マスゴミ・売国奴・医療業界が隠そうとする真実---------------------安楽死---------------------奴隷に勝手に死なれては困る
安楽死旅行企画が大人気|竹田恒泰チャンネル
https://www.youtube.com/watch?v=XmP1TRsAe88
武田邦彦:安楽死と大麻、そして売春・・・オランダに学ぶ
https://www.youtube.com/watch?v=nWV8YOY39tw
安楽死党
https://www.youtube.com/watch?v=8nU2UaSlGx0
自殺は後遺症が怖い!だから-----------------------------------安楽死制度-------------------------------------安心して生きるために bash スクリプト内でRのスクリプトを起動して統計処理させてその結果を
1か0かで戻り値($?)として返すにはどうすれば良いでしょうか? シェルスクリプト test.sh の内容
#!/bin/bash
r --vanilla --slave < test.R
# コマンドの直後に、終了コードを見る
echo $? ありがとうございます。
test.R側で戻り値を返す際の指定の仕方が判らなかったのですが、
単に戻り値が入った変数を最終行に書く? Rで、returnを使えるかどうか、よく知らないけど、
test.R(Rスクリプト)側に、return 0か1を書けば、
シェルスクリプト側に、返り値を返せないのかい?
もし返り値を返せるのなら、その直後に、
echo $? で確認できる
この話題を続けるのなら、名前欄に100と入れておくれ 手元のPCにインストールしてやってみたのですが、
test.Rで
nantoka <- 123
nantoka
とやって>>101のようにして $?を確認しても0ですね
return nantoka
と書くと今度は「エラー:予想外のシンボルです」と出て弾かれます
return はtest.R内定義された関数からの戻りにしか使えなさそうです。
やっぱtest.Rを呼び出した側にステータス値を返すのは出来ないんですかねぇ。 >>104
ちょっとまて。
0で正解だろ。
Rの処理が失敗すれば1に、成功すれば0だから、それで正しいだろ。
何がしたいんだ。
------- ここから -----
#!/bin/bash
cat <<EOF > test.R
nantoka <- 123
hoge
EOF
R --vanilla --slave < test.R
echo $?
------- ここまで ------
これならちゃんと期待通り1が返るけど。 >0で正解だろ。
>Rの処理が失敗すれば1に、成功すれば0だから、それで正しいだろ。
質問の仕方が悪くてすみません。具体的にやりたい事を書くと、mean()で計算した結果が、
ある範囲に入っていたらbashスクリプト側にスタータス値として 1を返し、範囲外だったら0
を返すをやりたいんですが、どう書いたら良いんでしょう。。。 Rスクリプト側でステータス値を標準出力に印字して
bashスクリプト側で変数に代入する事で出来ました。
>>105さんのレスがヒントになりました。感謝!
ありがとうございました。 RのpackageがGPL3のとき、それを使ったcodeもGPL3にしなければいけないのでしょうか?
packageがGPL2のときは、どうなるのでしょうか?ライブラリを動的にリンクすると解釈して、自分のコードはGPLにしなくていいのでしょうか? Rが嫌いすぎる。
1オリジンが気に食わない。
インデックス指定で、やたら+1とか-1を書かないといけない。バグの元凶。
名前空間の概念が皆無なのが気に食わない。デフォルトインストール状態でグローバルな名前空間に、
小文字二文字でしらっと置いてある識別子がただのサンプルデータ(例: lh)だったりする。
文法が気に食わない。「a <- b < -1」って書くべきところ、間違ってマイナスの前のスペースを
入れ忘れると、警告も無く別の意味になる。
設計したやつ頭悪すぎ。
できれば使いたくない、抹殺したいんだけど、仕事の分野で好んで使う人が多いんだよなぁ。 >>109
はははは、ウケる!
> デフォルトインストール状態でグローバルな名前空間に、
> 小文字二文字でしらっと置いてある識別子がただのサンプルデータ(例: lh)だったりする。
これは君の勘違いだから、よく確認して。 そこらのLinuxディストリのリポジトリからインストールすると、
datasetsパッケージから読まれた状態にならない? googlabilityの低さだけでRは唾棄するに値する。 >>111
そうだね。
$ R --vanilla
[snip]
> search()
[1] ".GlobalEnv" "package:stats" "package:graphics"
[4] "package:grDevices" "package:utils" "package:datasets"
[7] "package:methods" "Autoloads" "package:base"
でも、
> ls(envir = .GlobalEnv)
character(0)
だよ。 なお、起動時にライブラリが自動読み込みされるのが嫌なら、
~/.Rprofileなどで、
options(defaultPackages="")
とでもしておけばよいのでは。 なにバッドノウハウひけらかしてドヤ顔してんのww
Rが低能向けゴミ言語であることの証左にしかならんね。 じゃあフリーでLinuxでもWindowsでも使える
R以上の統計解析言語教えてくれ >>116
コンピュータ言語だと思うから、そのような感想が出てくるのでは?
統計ソフトウェアのマクロ機能と認識したらいい。 すみません、質問です。Rの教科書をめくりながら、length(grep("^[0-9]{8}", code))
というのを理解しようとしているのですが、"^[0-9]{8}"というのはどういうことですか? ^[0-9]{8}
^ は行頭。
[0-9]は、0〜9のうちのどれか、つまり数字。
{8}は、直前の文字が、8回繰り返す
つまり、行頭に、8桁の数字がある行にマッチする ありがとうございます、正規表現でぐぐって勉強しました。 striptimeで、時刻型に変換したデータを横軸にトレンドグラフをplotしています
このグラフに縦線を入れたいのですが、可能でしょうか?
date = c(20151101235959 , 20151103235959)
value = c(10 , 20)
plotdate = striptime(date , "%Y%m%d%H%M%S")
plot(plotdate , value , type="l")
ここまでは可能でした。
x軸に縦線を入れたいのですが、ablineでの描き方がわかりません
どなたかご教示いただけないでしょうか >>123
縦線って
> for(i in seq(from=plotdate[1], to=plotdate[2], length.out=10)){abline(v=i)}
こんな感じのものを求めているの? すみません、どうしてもわからなくて質問です。
a<-1:10
b<-1:10
for(i in 1:10){
for(j in i+1:10){
if(a[i]!=b[j]) print( すみません、どうしてもわからなくて質問です。
a<-1:10
b<-1:10
for(i in 1:10){
for(j in i+1:10){
if(a[i]!=b[j]) print("hello") }}
これを実行したらif文の所にエラーが出るんです。どうしたら解決できますか。教えてください、お願いします。 「i+1:10」のところの演算子で、+よりも:が優先されるから。
「(i+1):10」とすればよい。 ありがとうございます。聞かないと分かりませんでした。 R言語徹底入門、初版は何箇所か誤訳があるので購入は様子見。 増刷がかかるか
誤訳が修正されるか
と考えると買っちまうかな、「徹底入門」じゃなくて「徹底解説」。 増刷かかるほど売れないと思う。
でも仮に誤りがあったとしても得られるものは少なくないと思う。
岩波のWEBサイトで数ページPDFで読める。
R言語徹底解説
http://www.kyoritsu-pub.co.jp/bookdetail/9784320123939 Pythonのyieldに相当するものってないの? 書泉ブックタワーで一刷が山積みになってたから
各種の誤りが訂正された二刷が出るのは当分先になるのかな? 技術書なんて誤訳だらけだろ。校正してるのは文系なんだから。
ほとんどがマイナー、専門すぎてサイトに修正一覧出て初版で終わりだよ。
買いそびれたら最後、ボッタクリ価格でアマゾンで買うことになる。
手に入らないと途端に、誤植もなく、素晴らしい書籍とかデタラメなレビューが書かれて価格が釣り上がる。 過去に散々酷い目にあったよ。一番酷いのはPrograming C++の糞訳本だったかな。
あと確率統計の本で題名詐欺の本もあったよ。まじみんな気をつけたほうがいいよ。アマゾンのレビューだけは。 >>142
今日もあっちこっちで馬鹿レスしてるなおまえってw >>141
最近のアマゾンのレビューはほんと嘘だらけ。 R言語徹底解説
八重洲ブックセンターで第三刷があった。
平積みの方は第一刷だったけどw できるよ
でも今なら Julia がおすすめでっせ 過疎しているときに申し訳なくお聞きしたいのですが、
N(10,0.5^2)の,7.5以上の上側確率をRで一発で求めるコマンドはないでしょうか? すいません自己解決しました
pnorm(-(7.5-10.0)/0.5)でした
スレ汚しすいませんでした Rを使っている人ならわかる人もいると思うので
GNU科学技術計算ライブラリ リファレンス・マニュアル
https://ja.wikipedia.org/wiki/GNU_Scientific_Library
のどの関数を使って、どの関数を数値積分すればよいのか、
教えてほしい。
γ関数 https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%B3%E3%83%9E%E9%96%A2%E6%95%B0 を
使って ControlChartConstant2Double = gsl_sf_gamma(InSizeDouble / 2) * Sqr(2 / (InSizeDouble - 1)) * gsl_sf_gammainv((InSizeDouble - 1) / 2)
とすると、管理図用定数 c4 が得られる。
d2, d3 を求めるための
http://excelshogikan.com/qc/qc11/controlchartconstant.html
φなんたらが、GSLのどの関数なのか、数値積分のどの関数を使うのか、
がわからない。
積分は、わからなければ台形公式でエィヤーとやってしまうけど。
n20位までは数値表があるのだが、nをちょっと大きくして、24時間ことのn24とかやろうとすると、のっていない。
1回計算してしまえば、数値表を使って参照するだけなのでRで処理で切ると思う。 羽鳥の本は英語ならたいていpdfで無料で読めるから、文句いう人は英語で読めばよいと思うの 使い始めて1ヶ月
未だにエクセルより便利な場面に出会いませぬ
回帰分析程度じゃ意味ないかな まずは、セルでチェックできる程度の規模のデータか、あるいはもっと大きいのかによるんじゃないかな。
そして作業として簡単なものなら、多少表計算ソフトに歩があると思う。
でもこっちに慣れるとぜんぶこっちでやっちゃうけどねw
欠点としてはライブラリの秩序のなさかなw RMarkdownを使い始めると分析とレポート作成が同時にできるので便利さを感じると思うけどな なるほどと思ったブログがあったから貼っとくよ
yhat | R for Excel Users
http://shotwell.ca/blog/post/r_for_excel_users
ある特定の環境での成功体験が新たな環境への適応の障害となるのは
エクセルからRに限ったことではないと思う