【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/

394132人目の素数さん2018/05/25(金) 08:05:58.04ID:ZHt2t+40
やったことなかったので関数の初期値設定に<-を使うとどうなるかやってみた。
まず、= の場合
> z.test <- function(x,n=16,sigma=1){
+ z=sqrt(n)*mean(x)/sigma
+ 2*pnorm(abs(z),lower=FALSE)
+ }
> z.test(1:3)
[1] 1.244192e-15

<- で初期値設定すると、エラー

> z0.test <- function(x,n<-16,sigma<-1){
Error: unexpected assignment in "z0.test <- function(x,n<-"
> z=sqrt(n)*mean(x)/sigma
Error in mean(x) : object 'x' not found
> 2*pnorm(abs(z),lower=FALSE)
Error in pnorm(abs(z), lower = FALSE) : object 'z' not found
> }

395132人目の素数さん2018/05/25(金) 08:11:48.02ID:ZHt2t+40
俺は見栄えがいいと思って関数定義には<-を使っているけど
= でも通常に動作する。
> z.test = function(x,n=16,sigma=1){
+ z=sqrt(n)*mean(x)/sigma
+ 2*pnorm(abs(z),lower=FALSE)
+ }
> z.test(1:3)
[1] 1.244192e-15

<- 推奨の人に聞きたいのだけど
<- でないと動作しないってことあるのだろうか?

396132人目の素数さん2018/05/25(金) 09:41:36.92ID:GCdXSt8a
<-は、打つのが
=より面倒

うっとおしい

397132人目の素数さん2018/05/25(金) 20:19:41.68ID:dXqzteX1
RStudioつかってりゃ[Alt+-]で簡単入力

それと引数の指定は代入じゃないと思うんだが感覚が違うよかな?

398132人目の素数さん2018/05/25(金) 21:33:31.44ID:QNMt6z2O
>>396
essだとアンダースコアを入れるを勝手に「<-」になる。
>>394
それは代入ではなく、関数の規定値の設定。
規定値の設定は「=」と決められているので、「<-」はアウト。
ただし、関数を実行するときには「<-」を使うことができる。
> mean(x<-1:10)
[1] 5.5
> x
[1] 1 2 3 4 5 6 7 8 9 10

399132人目の素数さん2018/05/25(金) 22:26:21.26ID:Cz/+g7h9
=に拘り続けて、<-に変える瞬間の君たちがたまらないよ

400132人目の素数さん2018/05/28(月) 16:26:17.30ID:d/09kgU6
>>398
ありがとうございます。
そんな使い方ができたのですね。

こんなのしか知りませんでした。

> f <- function() {
+ x<<-1:10
+ mean (x)
+ }
> f()
[1] 5.5
> x
[1] 1 2 3 4 5 6 7 8 9 10

401132人目の素数さん2018/05/28(月) 20:56:51.59ID:Osxttqv4
一画面しかグラフがないのに

Hit <Return> to see next plot:

と出るの鬱陶しいな、と思っていたら

par(ask=FALSE)

と設定しておけばいいんだな。

402132人目の素数さん2018/05/29(火) 18:08:52.29ID:ZCWRCH5Y
同名のdataがあるのでパッケージを::で指定してもうまくいかなかった。

data(netmeta::parkinson)

でなくて

data(parkinson, package = 'netmeta')

とするんだな。

403132人目の素数さん2018/05/30(水) 06:16:03.29ID:fLd3NENr
hist(rnorm(100),col=rgb(runif(1),runif(1),runif(1),runif(1)))
だと、1色だけど

hist(rnorm(100),col=sample(colours(),(sample(1:10,1))))
なら1〜10色で表示される。

404132人目の素数さん2018/05/31(木) 21:37:03.79ID:BfVjjX7C
runif(1)なんて・・・

405132人目の素数さん2018/05/31(木) 23:16:15.39ID:grs1zCKo
> hist(rnorm(100),col=rgb(runif(1),runif(1),runif(1),runif(1)))
何色に増やしてもいいがな。
何をやりたいのかな?
hist(rnorm(5000),col=apply(matrix(runif(80),4), 2, function(x){rgb(x[1],x[2],x[3],x[4])}))

406132人目の素数さん2018/06/01(金) 21:54:20.67ID:Ef899k/0
:::てどういう時に使うんだろ?
ソース読みたくて
library(BayesFactor)
ttestBF_indepSample
では表示されなかったが、
library(BayesFactor)
BayesFactor:::ttestBF_indepSample
だと出てきた。

407132人目の素数さん2018/06/04(月) 13:04:13.10ID:3QOAvZa7
Stanも覚えなきゃいけないのかよーくそがー

408132人目の素数さん2018/06/04(月) 13:05:22.57ID:3QOAvZa7
::なら名前空間カブールよけよけの術だよね

409132人目の素数さん2018/06/04(月) 14:24:00.43ID:d7l4LqX9

410132人目の素数さん2018/06/05(火) 12:44:14.88ID:LfwL/Kok
>>408
:::と3個なんだよなぁ

411132人目の素数さん2018/06/05(火) 13:06:03.27ID:CHJNgrVq
>>410
グダグダ言っていないで、さっさとヘルプを参照すればいいじゃないか?
?':::'

412132人目の素数さん2018/06/05(火) 19:45:28.11ID:LfwL/Kok
>>411
ありがとう。

stats:::t.test.default

でt検定のソースが見られた

413132人目の素数さん2018/06/11(月) 00:14:18.19ID:K1zGYlRd
関数を値で上書きしてしまった場合に元に戻す方法を教えて頂きたく。

例)
rm <- 1
としてしまった場合にrm関数を元に戻したいです。


よろしくお願いします。

414132人目の素数さん2018/06/11(月) 07:21:35.69ID:+ayC4RGv
>>413
直後ならRstudioでctrl+zで元に戻す。
再起動してたらこの方法は無理だろな

415132人目の素数さん2018/06/11(月) 08:24:34.24ID:2ZHCUqeW
>>413
自分で作ったのではない関数の rm だったら rm(rm) で数値ベクトルオブジェクトが消えて、関数の rm が見えるようになる。

416132人目の素数さん2018/06/11(月) 15:01:37.34ID:mlFyU0v4
>>413
> rm <- 1
> ls()
[1] "rm"
> rm(rm)
> ls()
character(0)
> rm
function (..., list = character(), pos = -1, envir = as.environment(pos),
[以下略]

深く考えなくてもrm(rm) で元に戻るけど。
rmが数値ではなくて自作関数だったら、少々ややこしいけど、
base::rm()で大丈夫だろう

417132人目の素数さん2018/06/11(月) 17:04:35.54ID:Z+okZT62
>>413
既に説明されてるけど上書きじゃなくて別オブジェクト扱いになるからrmで消すか明示的にパッケージを::演算子で関数を指定してやればおけ

自作関数だと上書きされちゃうけど

418132人目の素数さん2018/06/11(月) 19:33:14.14ID:rfEFkwvW
rmが自作関数だと戻せないのでは?

> rm = function(x) asin(sqrt(x))
> rm(1)
[1] 1.570796
> rm
function(x) asin(sqrt(x))
> rm = 1
> rm
[1] 1
> rm(rm)
> rm
function (..., list = character(), pos = -1, envir = as.environment(pos),
inherits = FALSE)

419132人目の素数さん2018/06/11(月) 19:51:41.60ID:Z+okZT62
同じ名前空間にあるなら上書きされちゃうよ

.Gloalenv(だったかな?)に自作関数があり、そこに上書きして変数にしてるから消したら消えるだけで戻せない

420132人目の素数さん2018/06/11(月) 19:55:10.50ID:Z+okZT62
ちょっと古いけど、この辺りを読むとなぜそうなるかが分かると思う

(Rの)環境問題について その1。
ttps://qiita.com/kohske/items/325bdf48f4f4885a86f1

421132人目の素数さん2018/06/11(月) 20:04:41.37ID:mlFyU0v4
>>418
戻せます。
> rm <- function(x) asin(sqrt(x))
> rm
function(x) asin(sqrt(x))
> base::rm(rm)
> rm
function (..., list = character(), pos = -1, envir = as.environment(pos),
[以下略]

422132人目の素数さん2018/06/11(月) 20:06:37.76ID:mlFyU0v4
>>419
>.Gloalenv
case sensitiveなRでそれはないのでは?
> help(".GlobalEnv")

423132人目の素数さん2018/06/11(月) 20:19:14.99ID:Z+okZT62
フォローありがとう

4244132018/06/11(月) 21:00:49.78ID:K1zGYlRd
>>414-422
みなさまご返信ありがとうございました。
例示したものがbase::rmだったので自作関数のことまでは想像だにしませんでした…(がとても良い勉強になりました。)

自環境でも上書きした関数を元に戻すことが出来ることを確認しました。

425132人目の素数さん2018/06/12(火) 07:42:40.88ID:9RfEtlLW
>>421
戻したいのが自作関数
rm = function(x) asin(sqrt(x))
だったら上書きされて無理じゃないの?
ゴミ箱から消去したファイルを復活させるソフトもあるから
PCに詳しければ可能かもしれないけれど
Rの機能としては復活させるのは無理と思う。

426132人目の素数さん2018/06/12(火) 11:00:45.94ID:cD/mQB+6
自作のrm関数はbaseパッケージとは別に定義されるから
base::rm(rm)で自作の方のrmは消えてbase::rmが「復活」します。

427132人目の素数さん2018/06/12(火) 12:07:52.53ID:cD/mQB+6
ああすまん
自作の方を上書きした場合は、そっちの復活は無理ですね。

428132人目の素数さん2018/06/12(火) 14:36:07.63ID:VF7OcVBc
>>425
ちょっと意味がわからない。
自作の関数なら定義を再実行するだけなのに、
消える消えないって何が問題なんだ?

429132人目の素数さん2018/06/13(水) 14:39:27.58ID:ZXkz+qgi
>>424
関数だけでなく既定値でも同じ。

> pi
[1] 3.141593
> pi=2
> pi
[1] 2
> rm(pi)
> pi
[1] 3.14159

430132人目の素数さん2018/06/14(木) 09:27:55.98ID:mxBGyFKT
共同ツール 1
https://seleck.cc/685

https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり

共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/

共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://www.sketchapp.com/
ttp://photoshopvip.net/103903
ttps://goodpatch.com/blog/sketch-plugins/

Trello Chrome拡張機能プラグイン集
https://chrome.google.com/webstore/search/trello?_category=extensions

Slackプラグイン集
https://slack.com/apps

Sketchプラグイン集
https://sketchapp.com/extensions/plugins/
https://supernova.studio/

431132人目の素数さん2018/06/16(土) 19:29:24.89ID:10mr4q2e
はっとデシャング

432132人目の素数さん2018/06/17(日) 19:06:33.58ID:OYjqtCQI
>>306
知恵袋に漸化式があったので計算スクリプトを書いてみた。
表がでる確率pのコインをN回投げてK回以上表が続く確率。

# N: flips
# K: least sequential head
# p: probability of head
seqNp <- function(N=100,K=5,p=0.5){
if(N==K) return(p^K)
q=1-p
a=numeric(N) # a(n)=P0(n)/p^n , P0(n)=a(n)*p^n
for(i in 1:K) a[i]=q/p^i # P0(i)=q for any i

for(i in K:(N-1)){ # recursive formula
a[i+1]=0 # a[i+1]=q/p*(a[i]+a[i-1]+a[i-2]+...+a[i-(K-1)])
for(j in 0:(K-1)){
a[i+1]=(a[i+1]+a[i-j])
}
a[i+1]=q/p*a[i+1]
}

P0=numeric(N) # P0[n] : probability of ending with 0 head when flipped n times
for(i in 1:N) P0[i]=a[i]*p^i # P0(n)=a(n)*p^n

MP=matrix(rep(NA,N*K),ncol=K)
colnames(MP)=paste0('P',0:(K-1))
MP[,'P0']=P0
MP[1,'P1']=p
for(i in (K-2):K) MP[1,i]=0
# MP[k,n] = Pk[n] : probability of ending with k head when flipped n times
for(k in 2:K){ # Pk(n+1)=p*P(k-1)(n)
for(i in 1:(N-1)) MP[i+1,k]=p*MP[i,k-1]
}
ret=1-apply(MP,1,sum)

ret[N]
}

433132人目の素数さん2018/06/18(月) 09:16:00.35ID:JdABdagZ
>>306
この例で、答えとして何が返ってきて欲しいのか?
2で合ってる?

434132人目の素数さん2018/06/18(月) 21:23:58.67ID:fHaLluDH
>>433
1が5回以上出現しているからTRUE(数字なら1)が返り値。

435132人目の素数さん2018/06/19(火) 10:20:04.23ID:fcA67BpN
>>434
run.check <- function (x, n=5) {
# x の中に 1 が n 回以上連続していれば TRUE を返す.

chg <- c(TRUE, diff(x) != 0) # 変化があった場所
chgidx <- c(which(chg), length(x)+1) # 変化があった場所の添え字
run.length <- diff(chgidx) # 0や1の連続している個数
true.length <- run.length[x[chg] == 1] # 1の連続している個数
any(true.length >= n) # 連続している個数が n 以上のrunがあるか?
}

436132人目の素数さん2018/06/19(火) 21:57:17.85ID:QuKrVrE8
>>435
whichとdiffを用いての解法のお返事ありがとうございます。

実行時間を>302のスクリプトと比べてみました。

run.check <- function (x, n=5) {
# x の中に 1 が n 回以上連続していれば TRUE を返す.

chg <- c(TRUE, diff(x) != 0) # 変化があった場所
chgidx <- c(which(chg), length(x)+1) # 変化があった場所の添え字
run.length <- diff(chgidx) # 0や1の連続している個数
true.length <- run.length[x[chg] == 1] # 1の連続している個数
any(true.length >= n) # 連続している個数が n 以上のrunがあるか?
}


# N(=100)回コインをなげてn(=5回)以上続けて表がでる確率。
seqn<-function(n=5,N=100,p=0.5){
rn=rbinom(N,1,p)
count=0
for(i in 1:N){
if(rn[i] & count<n){
count=count+1
}
else{
if(count==n) {return(TRUE)}
else{
count=0
}
}
}
return(count==n)
}

> system.time(mean(replicate(10^5,run.check(rbinom(100,1,0.5)))))
user system elapsed
17.56 0.04 17.68
> system.time(mean(replicate(10^5,seqn())))
user system elapsed
9.74 0.07 9.78

後者の方が速いのは1がn個連続したら、TRUEを返して終了するので以後のチェックはしないためだろうと思います。

diff や anyの使い方が勉強になりました。

時間を割いてスクリプトを作成していただいてありがとうございます。<(_ _)>

437132人目の素数さん2018/06/21(木) 10:12:41.96ID:Ze2kEGUX
Rstudioで日本語の入力ができないのですが、解決する方法知ってる方いませんか?
具体的には、IME自体をオンにすることができません。
日本語の表示やコピペは問題なくできます。

環境
Linux - Utubntu
RStudio Version 1.0.143

438132人目の素数さん2018/06/21(木) 10:26:53.84ID:Fds/4hNR
RStudioのQtが古いのでパッチ当てないと日本語入力できないのが現状ですわ
パッチはUbuntu 16.04.LTS用にしかないので他のバージョンならRStudioサーバー使った方が早いかと

なお、パッチはRStudio 日本語とかでグクってみて

439132人目の素数さん2018/06/23(土) 17:38:43.39ID:aZCZP6wm
windows版のRStudioでもたまに日本語入力ができなくなる。
別のソフトでIMEのON/OFFをやってから戻ると直るけど。

440132人目の素数さん2018/06/23(土) 20:18:55.21ID:4XxgOFIA
>>439
うちも同じ。

441132人目の素数さん2018/06/23(土) 21:30:47.03ID:JcH4CpHc
Windowsはストアアプリでも同じ症状でるから持病なんじゃないかと思う
Ubuntuはfcitxのパッチ当てとけばWindowsのような症状は出ないので快適

442132人目の素数さん2018/06/25(月) 13:23:09.19ID:rmZ6BvQE
これをやってみた。
http://img-cdn.jg.jugem.jp/d75/1405116/20140609_1105745.jpg

スクリプトは
http://imagizer.imageshack.com/img921/8020/t1VcqA.jpg
小数点以下500桁でみると19個素数があった。

> vip=Vectorize(is.prime)
> (idx=which (vip(N)))
[1] 100 124 150 172 183 202 215 219 255 296 310 314 323 346 400 417 439 441 474
> cat(substring (e,idx[1],idx[1]+9))
7427466391

443132人目の素数さん2018/06/26(火) 07:08:45.35ID:Na/Ih9Bj
問題

99人の囚人がいます。彼らの頭に1〜100までのナンバーカードが貼りつけられた帽子をランダムにかぶせます。
他人の帽子は見ることができても、自分の帽子は見ることができません。
帽子の数は全部で100なので、一つ使われずに余ります。
そのナンバーは囚人達にはわからないようにしておきます。
この状況で、囚人たちに一斉に自分のナンバーを宣言させて、全員が正解だったら釈放するという賭けをします。
囚人たちには帽子をかぶせられる前に相談タイムが設けられています。
どういう戦略を取れば、助かる確率を最も高くできるでしょうか?
http://000013.blogspot.com/2010/12/99.html

解答を読んでも数理が理解できないが
確率が0.5になるのはシミュレーションできた。

# http://000013.blogspot.com/2010/12/99.html
inversion <- function(x){
n=length(x)
ret=numeric(n)
for(i in 1:(n-1)){
ret[i] = sum(x[i] > x[(i+1):n])
}
sum(ret) # inversion number
}
is.even= function(x) !inversion(x)%%2 # is inverion number even?

prisoner99 <- function(n=100){
indx=sample(1:n,1) # defective number
X=sample((1:n)[-indx])
Y=numeric(n-1)
for (i in 1:(n-1)){ # select as even permutation
x1=X[-i]
x2=(1:n)[!(1:n) %in% x1] # two numbers unseen for i-th prisoner
tmp=X
tmp[i]=x2[1] ; tmp[n]=x2[2]
Y[i]=ifelse(is.even(tmp), x2[1],x2[2])
}
all(X==Y)
}
mean(replicate(1e3,prisoner99()))

444132人目の素数さん2018/07/11(水) 16:20:29.88ID:zFHa28EV
>>437
遅レスだが、Ubuntu 18.04LTSならデフォルトのIBus-mozcで日本語入力ができるそうだ。
詳しくはUbuntu Weekly Recipeの第527回を読んでくだされ

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