【R言語】統計解析フリーソフトR 第6章【GNU R】 [無断転載禁止]©2ch.net

1132人目の素数さん2017/08/03(木) 19:23:12.67ID:Hq1blL0O
R は統計計算とグラフィックスのための言語・環境です。
統計計算で重宝するデータ型や、複数要素を処理する演算や関数、
解析結果を表示するグラフィックなど、多彩な機能を提供します。

●関連サイト
The R Project
http://www.r-project.org/
RjpWiki
http://www.okada.jp.org/RWiki/
リンク集
http://www.okada.jp.org/RWiki/?%A5%EA%A5%F3%A5%AF%BD%B8
※前スレ
【R言語】統計解析フリーソフトR 第5章【GNU R】
http://rio2016.2ch.net/test/read.cgi/math/1380168442/

606132人目の素数さん2018/12/02(日) 13:24:03.04ID:8De20Fh0
histグラムぽく対数表示

dat=hist(c(rnorm(1e6),rnorm(1e5,5,0.5)))
attach(dat)
plot(breaks[-1],counts,type='s',log='y',ylim=range(counts))
segments(x0=breaks[-1],y=min(counts),y1=counts)
segments(x0=breaks[1],y=min(counts),y1=counts[1])

607132人目の素数さん2018/12/04(火) 00:31:54.32ID:4UCEIb49
すみませんがアドバイスお願いします。
heatmap.2でDendrogramつきヒートマップを描きたいのですが、カラムの並びを任意に変えたいです。
Dendrogramの細かい並びは変えないように、大きなクラスタの並びを変えたいです。
例えば、(1,2,3)(4,5,6)(7,8,9)とあるのを
(4,5,6)(7,8,9)(1,2,3)とならび変えるのが目的です。
このとき、4,5,6と7,8,9は近いクラスタを形成します。なので、樹形図は崩れないように書き換えられると思っています。

https://www.biostars.org/p/237067/
上記サイトをみると、as.dendrogramのアウトプットをreorderで並び替えてColvに入れるようですが、
うまくいきませんでした。並びは全く変わっていません。
どなたか教えていただけますか。情報に漏れがありましたらご指摘ください。

環境は以下の通りです。
R 3.4.0
Rstudio 1.0.143
Win10になります。

608132人目の素数さん2018/12/04(火) 10:04:43.34ID:QKKYvADK
頓珍漢な答かもしれない。
並べ替えだけなら
x=rbind(c(1,2,3),c(4,5,6),c(7,8,9))
x[c(2,3,1),]

609132人目の素数さん2018/12/04(火) 10:06:24.27ID:QKKYvADK
listなら
x=list(c(1,2,3),c(4,5,6),c(7,8,9))
x[c(2,3,1)]

610132人目の素数さん2018/12/04(火) 18:58:07.88ID:7f8uMrnq
初歩的な話なんだが、一様分布の分散は無限大かと思っていたら区間[a,b]で(a-b)^2/12とのこと。
Wolframで計算したら確かにそうなった。
https://www.wolframalpha.com/input/?i=integral(x-(a%2Bb)%2F2)%5E2%2F(b-a),from+a+to+b

バスの到着時間が平均10分の指数分布に従うときにランダムにバス停に行ったときの平均待ち時間は10分。

バスの到着時間が平均10分の一様分布に従うときにランダムにバス停に行ったときの平均待ち時間は6分40秒。

バスがきちんと10分毎に到着するときはランダムにバス停に行ったときの平均待ち時間は5分。

乱数発生させて公式でのシミュレーション
> d2w8 <- function(x){# w8=E[X2]/2E[X]=(V[X]+E[X]^2)/2E[X]
+ c(mean=mean(x),var=var(x),w8=mean(x^2)/mean(x)/2)
+ }
> N=1e6
> d2w8(rexp(N,1/10)) # exp average:10
mean var w8
10.02477 100.67652 10.03377
> d2w8(runif(N,0,20)) # unif average:10
mean var w8
9.997470 33.325065 6.665408
> d2w8(rep(10,N)) # regular interval 10
mean var w8
10 0 5

611132人目の素数さん2018/12/06(木) 14:39:28.97ID:P/rPOK1I
NULLのときってどうしてこういう仕様なんだろ?
プログラムしていたら、これに気づかないのがバグの原因だったw

> any(NULL)
[1] FALSE
> all(NULL)
[1] TRUE

612132人目の素数さん2018/12/06(木) 20:13:51.63ID:P/rPOK1I
= と <-で微妙に動作が違うな。

> switch (3,
+ x =1,
+ x =2,
+ x =3
+ )
[1] 3

> switch (2,
+ x <- 1,
+ x <- 2,
+ x <- 3
+ )

613132人目の素数さん2018/12/06(木) 21:58:17.80ID:EMJ7DN40
>>612
そのふたつは意味が異なる
それぞれちゃんと命令どおりの挙動

614132人目の素数さん2018/12/06(木) 22:22:18.13ID:P/rPOK1I
どちらが見やすいかという問題かな。
> rm(x)
> x=switch(1,x =1)
> x
[1] 1
> switch(1,x<-1)
> x
[1] 1

615132人目の素数さん2018/12/06(木) 23:13:35.91ID:EMJ7DN40
>>614
その二つは異なるアルゴリズムでたまたま結果が同じになっているだけ
=と<-の違いはRやるなら理解しておいたほうが良い

616132人目の素数さん2018/12/07(金) 07:46:59.34ID:H6LI4wTx
>>615
scopeが違うってことですね。

617132人目の素数さん2018/12/07(金) 08:01:49.32ID:H6LI4wTx
0^x =0
x^0=1
0^0=1とした方が辻褄が合うことが多いけど
Rのこの仕様には何のメリットがあるんだろ?
> any(NULL)
[1] FALSE
> all(NULL)
[1] TRUE
>

618132人目の素数さん2018/12/07(金) 16:08:57.61ID:3jKAkgsb
奥村さんみたいなこと言わんといて
神経質すぎ

619132人目の素数さん2018/12/23(日) 11:38:19.16ID:CnP6hLfL
>>120
平成29年の簡易生命表から
f=c(179,28,19,13,9,7,6,5,5,4,4,4,5,7,9,10,11,12,14,16,18,19,19,20,21,22,23,24,25,27,28,30,
31,34,37,39,41,43,46,51,57,63,70,77,83,91,99,109,119,130,142,155,167,178,190,202,216,
233,249,265,282,302,326,354,387,420,457,502,549,598,648,700,761,836,927,1026,1142,1284,
1455,1651,1862,2089,2341,2625,2934,3264,3598,3923,4233,4508,4740,4893,4973,5007,4999,
4729,4314,3797,3222,2634,2071,1566,1135,788,523,761)
m=c(191,31,21,13,10,8,8,8,7,7,7,8,9,11,14,17,21,26,32,37,42,46,49,50,50,50,49,49,50,52,55,
58,60,63,65,67,71,76,82,89,97,104,112,122,134,148,165,183,203,224,246,268,294,324,357,
391,425,461,502,549,601,659,722,792,872,958,1052,1147,1239,1331,1433,1546,1663,1783,
1905,2026,2167,2333,2532,2750,2973,3195,3414,3630,3827,4000,4133,4200,4194,4104,3916,
3681,3388,3046,2669,2272,1875,1494,1145,841,589,392,246,144,79,71)

LE <-function(ndx,Y,N0=10^5){ # life expectancy
n=length(ndx)
lx=numeric(n)
lx[1]=N0
for(i in 1:(n-1))
lx[i+1] <- lx[i] - ndx[i]
nqx=ndx/lx
nLx=numeric(n)
for(i in 1:n)
nLx[i] <- mean(c(lx[i],lx[i+1]))
nLx[n]=0
Tx=rev(cumsum(rev(nLx)))
le=Tx/lx
return(round(le[Y+1],1))
}

LE(m,65)
LE(m,61)

620132人目の素数さん2018/12/28(金) 00:54:31.27ID:fO3GkB5Y
pushってありますか?
例えばベクトルに値を追加すると
先頭が消えて後尾に新しい値をついかして要素数を一定に保つような

一定要素数以下の平均を求めたいのでそういうのが簡単に実現できる方法あればなおよいです

621132人目の素数さん2018/12/28(金) 01:17:50.69ID:fO3GkB5Y
ベクトルをrev()して先頭を[1:50]とかでとりだしてman()すればいいとわかりました
ほかにもっと簡単な方法アレばお湿気てください

622132人目の素数さん2018/12/28(金) 07:19:51.35ID:1iwNDVav
append(x[-1],y)

623132人目の素数さん2018/12/28(金) 08:10:10.49ID:4Fwuxgb+
>>621
mean(tail(x, 50))

624132人目の素数さん2018/12/29(土) 08:09:54.89ID:Pk3SjXcs
組み合わせると
f=function(x,y,n=50) mean(tail(append(x,y),n))

625132人目の素数さん2018/12/30(日) 10:52:59.30ID:3dqEgqR+
>>624
これはおかしい

626132人目の素数さん2019/01/07(月) 02:16:23.34ID:OfD+CJ7t
時系列データをplot()したときに縦線をabline()でいれたいのだがどうすればいいかよくわからないです

具体的には
timeStr <- "2018-01-07 01:00"
dateTime <- strptime(timeStr, format="%Y-%m-%d %H:%M") #"POSIXlt" クラスオブジェクトに変換
として時間データに変換したものをx軸としてプロットしたものです
たとえば
plot(x=dateTime, y=1)
abline(v=?????)
として縦線を追加したいのですが

627132人目の素数さん2019/01/07(月) 02:50:32.42ID:OfD+CJ7t
v=as.POSIXct("2019-01-06 01:00")
みたいな感じにすれば解決しました

628132人目の素数さん2019/01/07(月) 18:42:57.56ID:oKAYsRfx
>>278
かなり遅れすだけど
formals(cor)

629132人目の素数さん2019/01/07(月) 19:36:20.34ID:oKAYsRfx
>>611
>>617
俺の予想
判定するときにNULLは強制的に論理値に変換される
変換されると logical(0) になる
logical(0) は空のベクトル
からのベクトルが渡されて中身をチェックしていく
アルゴリズムとして早く処理するためには
any()はTRUE探しにいって、一個でもTRUEがみつかればその時点でTRUEをかえす
all()はFALSEを探しに行って、一個でもFALSEがみつかればその時点でFALSEをかえす
もちろん最後までみない

空のベクトルが渡されたのでTRUEもFALSEもみつからない、となると
any()ではFALSEとなり
all()ではTRUEとなる

これで辻褄はあう
ちなみに
any(c())
all(c())
でも同じ結果が出る

630132人目の素数さん2019/01/08(火) 12:14:42.13ID:LiVTLUAx
1行のテキストデータを最終的に数値とテキストの混在するN行M列のデータフレームにしたいのですが、なかなかうまく出来ません。
1行データの構造の設計からデータフレームの変換までどうすればシンプルに実現できるか助言ください。

たとえば
1 a
2 b
というようなデータを
1-a,2-b
というような一行のテキストデータから初めてテーブル構造にするというような形です

x <- "1-a,2-b"
y <- str_split(x, ",")

と試しにやってみたのですがyが行単位のベクトルになるだけでここからどうデータフレームにすればよいかわかりません

631132人目の素数さん2019/01/08(火) 12:50:44.29ID:qzUBBMdZ
>>630
何をしたいのか、まったく理解できない。最低限、N, Mが何なのか説明したらどう?

632132人目の素数さん2019/01/08(火) 13:31:30.92ID:By0HLtnN
>>630
文字列 1-a,2-b を 数値とテキストのデータフレームにしたいという意味と解した。

x="1-a,2-b"
y=strsplit(x,",")
z=unlist(y)
w=NULL
for(i in 1:length(z)){
w=rbind(w,unlist(strsplit(z[i],"-")))
}
data.frame(NUM=as.numeric(w[,1]),TEXT=w[,2])

633132人目の素数さん2019/01/08(火) 13:33:34.43ID:By0HLtnN
実行結果
> x="1-a,2-b"
> y=strsplit(x,",")
> z=unlist(y)
> w=NULL
> for(i in 1:length(z)){
+ w=rbind(w,unlist(strsplit(z[i],"-")))
+ }
> data.frame(NUM=as.numeric(w[,1]),TEXT=w[,2])
NUM TEXT
1 1 a
2 2 b
>

634132人目の素数さん2019/01/08(火) 13:34:00.52ID:LiVTLUAx
>>631
NMは任意の数字です
したいことは
データを一行に記録してそれを
テーブル構造にすることです。
これだけです。

一旦ファイルに保存してread.csvなどにすればよいのでしょうが
いちおう直接テキストデータをコピペしてからということにしたいのです。

なぜこんなことをするかと言うと
TamperMonkeyという拡張機能でJavaScriptで使ってウェブ上のデータを収集しているのですが、
localStrageというクッキーの拡張版のような機能をつかってデータをクライアントに保存するときに基本的にテキストデータベースでの保存になので
一行のデータとして後ろにどんどんデータを追加していくのが一番単純な処理に成るからです。

そのlocalStorageに保存されたデータはコピペで取り出すしかないので
それをRで処理する時に一行のテキストデータから始めないといけないのです。

635132人目の素数さん2019/01/08(火) 13:56:11.34ID:qzUBBMdZ
>>634
, を行のデリミタ、- を列のデリミタとして、一行の文字列をデータフレームにするというのであれば、
s に文字列が入っているとして、
r <- unlist(strsplit(s, ","))
d <- lapply(r, function(x) unlist(strsplit(x, "-")))
as.data.frame(do.call(rbind, d))

列数が行によって異なるときにどうなるかは知らん。

636132人目の素数さん2019/01/08(火) 14:57:46.44ID:By0HLtnN
>>629
内部動作の考証ありがとうございます。


未だにこれは理解できません
> logical(NULL)
Error in logical(NULL) : invalid 'length' argument
> logical(0)
logical(0)
> logical(1)
[1] FALSE

637132人目の素数さん2019/01/08(火) 19:53:14.03ID:CxwlQqo4
>>630
> txt <- "1-a,2-b,3-c"
> read.table(text = gsub(',', '¥n', txt), sep = '-')
V1 V2
1 1 a
2 2 b
3 3 c
こんな感じか?

638132人目の素数さん2019/01/08(火) 20:04:46.51ID:CxwlQqo4
>>636
自分の解釈では、
NULL は「無」なのでエラー(引数はベクトルの要素数を必ず与えなければいけない)
0のとき、0個という指定なので、0個の要素をもつベクトル
1のとき、1個という指定なので、1個の要素を持つベクトル(規定値はFALSE)

ちなみに、
> logical(2)
[1] FALSE FALSE
2のとき、2個という指定なので、2個の要素を持つベクトル(規定値はFALSE)

639132人目の素数さん2019/01/08(火) 20:41:30.30ID:gJU+fDZy
>>638
解説ありがとうございました。

640132人目の素数さん2019/01/08(火) 21:41:07.74ID:LiVTLUAx
皆さんありがとうございます。

>>637
ファイル入れなくてもできるんですね

641132人目の素数さん2019/01/08(火) 22:24:00.83ID:LiVTLUAx
最古の元号って大化なん?
一巡回って大化2でいいよ
あとは干支みたいに回せばいい

642132人目の素数さん2019/01/08(火) 22:43:03.83ID:9qwcPkmK
三文字やめれ

643132人目の素数さん2019/01/08(火) 23:33:49.53ID:/Jd5B1BR
じゃあ太蟹(たいかに)で

644132人目の素数さん2019/01/08(火) 23:44:56.11ID:LiVTLUAx
>>641は誤爆ですw
レス付くと思わなかった。。。

645132人目の素数さん2019/01/08(火) 23:47:19.60ID:LiVTLUAx
>>639
⇣の結果をすべて即答できるようになれば合格だと思います…

any(c(TRUE,NA))
any(c(FALSE,NA))
any(c(FALSE,NA,TRUE))
any(c(NA, TRUE))
any(c(NA,FALSE,TRUE))

all(c(TRUE,NA))
all(c(FALSE,NA))
all(c(FALSE,NA,TRUE))
all(c(NA, TRUE))
all(c(NA,FALSE,TRUE))

TRUE | NA
FALSE | NA
FALSE | NA | TRUE
NA | TRUE
NA | FALSE
NA | FALSE | TRUE

TRUE & NA
FALSE & NA
FALSE & NA & TRUE
NA & TRUE
NA & FALSE
NA & FALSE & TRUE

646132人目の素数さん2019/01/09(水) 00:23:21.60ID:aVxwJ5mP
鯛蟹で

647132人目の素数さん2019/01/09(水) 02:19:38.70ID:tVKwPfCD
改元は改源で

648132人目の素数さん2019/01/09(水) 06:18:55.77ID:DWUqFfaE
源義光とか

649132人目の素数さん2019/01/10(木) 19:23:43.99ID:a/KDy24T
ggplot2で凡例をまとめる事ってできないでしょうか。
例えば、下記のコードでは線と点で別々の凡例になります。
線と点のスタイルを合わせて1つの凡例にしたいのですがどうすればいいでしょうか。

geom_line(mapping=aes(colour=Conditions),alpha=0.6)
+ geom_point(mapping=aes(shape=Conditions,colour=Conditions),alpha=0.8)
+ scale_shape_manual(values = 1:3)

6506492019/01/10(木) 20:22:57.38ID:a/KDy24T
すみません自己解決しました。
このコードではなくもっと後のthemeで凡例のスタイルを変えるときに余計なことをしていました。

651132人目の素数さん2019/01/10(木) 23:01:43.10ID:HnjZz/GW
mean.a <- function(x) "a"
mean(a)
#> [1] "a"

これ本に書いてたんだけど
君たちこれ実行して"a"がでてくる?
自分とこでじっこうしても

> mean(a)
[1] NA
警告メッセージ:
mean.default(a) で: 引数は数値でも論理値でもありません。NA 値を返します

となるんやけど?
いみわからん。

652132人目の素数さん2019/01/10(木) 23:06:00.24ID:HnjZz/GW
あ、一応↓に電子版あるので興味ある人はページ内検索してみてください
http://adv-r.had.co.nz/OO-essentials.html

653132人目の素数さん2019/01/10(木) 23:11:23.83ID:HnjZz/GW
あ、上の方から順に入力していったらでたわ
でもJSでOOかじった程度なので全然意味分からん
なにやってんのこれ?

654132人目の素数さん2019/01/10(木) 23:48:17.35ID:rLaGFww4
>>653
オブジェクト指向をちゃんと勉強してくれ。

655132人目の素数さん2019/01/11(金) 19:05:06.45ID:Q3ISqt43
>>652
横からだが、勉強になった。
クラスの自作とか考えたことがなかったけど、今度、俺様クラスを作ってみよう

656132人目の素数さん2019/01/13(日) 19:54:34.41ID:c90jMv3t
>>649
知ってるかもだけどいちいちmappingは書かなくてもいい
scale_shapeも値が1:3ならいらない

ggplot(data, aes(shape=Conditions, col=Conditions))+
geom_line(alpha=0.6)+
geom_point(alpha=0.8)

新着レスの表示
レスを投稿する