N個の独立な一様乱数(-1, 1)の和の標準偏差は1/3√N

手計算で確認&ボケ防止にRでチェック。 sizes <- 2**(1:15) y <- numeric(length(sizes)) for(i in seq_along(sizes)){ x <- numeric(10**3) for(j in seq_len(10**3)){ x[j] <- sum(runif(sizes[i], min=-1, max=1)) } y[i] <- sd(x) } plot(sizes, y) lin…

glue::glue()をちょっと便利に使う

R

glueパッケージのglue()は、いわばPythonでいう .format() を使えるようにするパッケージなわけで、以下のようにテンプレートの文字列 (ここでは"a is {a}" )を、その”傍にある”*1 変数で勝手に埋めてくれるので便利に使えるわけです。 > a <- 123 > glue::g…

Juliaでlogsumexp

何も考えずにできた。 function logsumexp(x) xmax = maximum(x) xmax + log(sum(exp(x - xmax))) end > x = [1,2,3,10] > log(sum(exp(x))) > logsumexp(x) > 10.001369815771387 Syntaxハイライトが効かないので、そろそろBLOG引越しの機運か。

purrr::map_dfr = lapply + dplyr::bind_rows

そういうことなんだよな〜シミュレーション系でよく使うのでメモ。 > dplyr::bind_rows(lapply(1:3, function(x){head(iris, 1)})) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 5.1 3.5 1.4 0.2 setosa 3 5.1 3.…

fillは shallow copy (浅いコピー)作るので危険

めちゃハマったのでメモ。 julia> mutable struct Hoge x::Int end julia> xs = fill(Hoge(10), 2) 2-element Array{Hoge,1}: Hoge(10) Hoge(10) julia> xs[1].x = 333 333 julia> xs[2].x 333 内包表現(でいいのか?)使うならおk。 julia> xs = [Hoge(10…

Sys.getenv()の結果をdata.frameとして扱いたい

Dlistというクラスのオブジェクトになっていて使いにくい。 > x <- Sys.getenv() > class(x) [1] "Dlist" しょうがないんで、これをdata.frameとして返却する関数を書いた。 get_env <- function(x=NULL) { env <- Sys.getenv(x) class(env) <- NULL env <- …

R MarkdownでTwo Column(2列)なレポートを作りたい

R

将来的にオレオレJulia v.s. Rチートシートを作るための礎。 主にこちらのStackoverflowを見て適当にCSSコピペった。以下のMarkdownが のような形でHTMLになる。 この左右どちらかをJuliaのengineに帰ればHTML版のチートシートは作れるぞと。 --- title: "Tw…

Windows Subsystem for LinuxにJuliaを入れる

諸事情により手を出す&マシン新調予定なのでメモ。 今はWSLっていって、もうBash on Windowsって名前じゃなくなってたんだな。WindowsのBashからhttps://julialang.org/downloads/のGeneric Linux Binaries for x86をwgetして、解凍して、名前変えておしま…

外国債券(為替ヘッジなし)のリスクは、ほとんど為替から来るという話

掲題の件、ちゃんと数式にしておく。 以下、使うものの定義 (お持ちになられている)外国債券の時点tでの現地通貨建て価格(面倒なのでUSD仮定): (お持ちになられており、日々一喜一憂しているであろう)外国債券の時点tでの円建て価格: 時点tでのUSDJPYレート…

paste0()を捨てたい

R

文字列を結合するときに使う paste0()を捨てたくて、 `%+%` <- function(x, y){paste0(x, y)} を定義してみた。 こんな感じで使う。 > "hoge" %+% "moge" [1] "hogemoge" うれしい・・・かな? tidyverseあたりに出てきてもよさそうな機能なんだが、出てきた…

bitFlyer LightningのAPIをRから使う

R

"何でもRでやるおじさん日本代表(タヒチ在住)"として、いい加減書いておかねばならないと思った。 まずは、APIキーを頑張って以下から取得してください。 https://lightning.bitflyer.jp/developer そして、その情報とbitFlyerのURLをなんでもいいんだけど…

全ての引数の名前と値をlistとして取得したい

R

この前教えてもらったのから察するに、こんなんでいいっぽい。 三連ドット(...)的に全部の引数が取れればもっと楽そうだが・・・ > f <- function(x=NULL, y=1){ + purrr::map(rlang::set_names(c("x", "y")), ~ rlang::eval_tidy(rlang::sym(.x))) + } > f…

eval(parse(text=...))をモダンに書きたい

R

掲題の件、 eval(parse(text=...))をモダンな書き方にしたいと思って、r-wakalangで回答貰ったやつのメモ。昔ながら(一部、purrr使ってるんでモダンにも見えるが・・・)の書き方だとこんなん > hoge1 <- function(x){x+1} > hoge2 <- function(x){x+2} > >…

Rのパッケージをtidyに開発する

R

この記事は tidyポエム Advent Calendar 2017 - Adventar の24日目の記事です。 はじめに 今年はRのパッケージをゴリっと開発することが多かったので、そこで培った2つのノウハウをここにメモっておきます。 tidyなデータ処理があるようにtidyなパッケージ…

R Markdownの出力HTMLの幅を広げる

R

「R Markdownの出力HTMLの幅を広げたいときはどうするんだ」と思っていたが、こんな感じでCSS書けばいいだけだった。 --- title: "Untitled" author: "Nagi Teramo" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TR…

rlang::eval_tidy()と!!は違う

R

老害度が増してきているので、dplyrパッケージなどの裏側で使われている新しい"Rの評価"を与えるrlangパッケージについて勉強してた。 rlang::eval_tidy()と!!は違うんだなってことである。まずはそれらのパッケージを読みこむ。 library("rlang") library("…

適当なデータをsklearnでカーネル密度推定する

クロスバリデーション付きでどう書くのが楽かなと考えた。 私なりの答えはこんなん。ライブラリのimport設定は以下で使うものもまとめて書いちゃってる。 import numpy as np import matplotlib.pyplot as plt from scipy import integrate from sklearn.mod…

WTI原油価格連動型上場投信(1671)の粗い可視化

R

石油に強い興味があるので、WTI原油先物に連動するETFの価格データをサクッと取得&簡易表示。まずデータの取得&可視化。変数名はxtsクラスのオブジェクトなのでdfは正しくないが、まぁいいや… library("quantmod") #quantmodがYahoo Japanのサイトから抜い…

R・Pythonのロジスティック回帰結果が一致することを確認

ちゃんと一致するのかなって不安になったので適当なデータでチェック。 元になるデータはこの記事のものをそのまま流用している&何なのかは知らん。 Python編 その1 Pythonのコード import pandas as pd import sklearn.linear_model df = pd.read_csv("ht…

"相関係数の標準誤差"の計算について

R

掲題の件、そういうことです。ここのCrossValidated 、及び参照されている論文を見ると、相関係数の標準誤差は として計算されるらしい。記号の意味はお察し。これをRで愚直にシミュレーションした結果とチェックしたら大体あってた(下図)ので、これでいい…

Pandasの参照先が変わるタイミング

よくわからんので、とりあえずメモ以下 import pandas as pd def hoge(x): x.iloc[1] = 100 df = pd.DataFrame({'A': range(3)}) hoge(df) df を実行すると A 0 0 1 100 2 2となるので、hoge関数にはdfのポインタ(参照)が渡されているのがわかる、これはい…

長めのID(数値)を持つ場合は明示的に文字列で読む

R

例えばこういうファイル(hoge.csv)があったとする id, value 31274832974983278756, 1.22これをRで読み込と「あ、アレ?IDの下の桁変わってない???」となるわけだ。 > library("readr") > df <- read_csv("hoge.csv") > as.character(df$id) [1] "3127483…

tibbleを下まで表示するには option('tibble.print_max')を指定する

R

これも.Rprofileなんかに突っ込んでおいたほうがいいと思うんだよな。 options('tibble.print_max' = 1000)

パッケージの”中”で使ってるパッケージはDESCRIPTIONのImportsに書けばOK

R

いろいろふわふわしていて危ういので、助けをもとめた。 DESCRIPTIONにImportsは書いておいて、パッケージ内部では常に :: を用いて他のパッケージの関数を呼び出すスタイルでやっているらしい。Wicham Hadleyのここを読むのが一番まとまっているとは思う。 …

ggplot2の軸の目盛りを10のべき乗で書く

R

ggplot2で、軸を”10のほげほげ乗”で描画するのに苦労したので、メモ。 ググった感じ、自作で関数作るしかないっぽい。必要なライブラリと適当なデータを用意。 library("ggplot2") library("scales") library("stringr") df <- data.frame(x=10^(-2:1),y=10^…

行列の非対角要素を抽出したい

対角要素はdiagで行けるけど、非対角要素がわからんかったので教えてもらった。 row, col()関数ってのがあるらしい。知らんかった… > x <- matrix(1:4, 2) > x [,1] [,2] [1,] 1 3 [2,] 2 4 > x[row(x) != col(x)] [1] 2 3 > diag(x) [1] 1 4

model.matrix関連のメモ

ちょっといじったけど超便利だった。 3つ目のLINKが最高にいい。 参考 りんだろぐ rindalog: model.frame と model.matrix Rのmodel.matrixの説明 · JoeMPhilips [R] 予測モデルを作るには formula を活用せよ - ill-identified diary formulaとは?(1) -…

行・列のIndexを指定した上でpandas.DataFrameを作る

Indexの指定がめんどくせぇわ… In [1]: import pandas as pd In [2]: df = pd.DataFrame([ ...: [0.00, 0.03, 0.000], ...: [0.01, 0.04, 0.005], ...: [0.02, 0.05, 0.010] ...: ], ...: index=pd.Index([0, 1, 2], name='hoge'), ...: columns=pd.Index(['…

関数のイコールをチェックしたいといはidentical関数

R

結構長くR書いてエル気がするが、よくよく考えるとidenticalが必要になる場面に初めてぶつかった気がするのでメモ。 今までは別のやり方で回避していたのだろうか? > #適当な関数を定義 > f <- function(){print("hoge")} > g <- function(){print("hage")}…

numpy.arrayも基本シャロー・コピーだが、部分を取るとディープ・コピー

http://d.hatena.ne.jp/teramonagi/20170411/1491892292の続き的な。bの部分集合を指定した時点でコピってんだろうなぁ。。。 >>> import numpy as np >>> a = np.array([[1, 2],[3, 4]]) >>> b = np.array([[6, 7],[8, 9]]) >>> a[[(0,0), (1,1)]] = b[[(0,…