Knowledge As Practice

JAIST(東京)で Transformative Service Research に取り組んでる社会人大学院生の研究・勉強メモ

Rでダミー変数をつくる。makedummies 関数で。

●2015年12月28日 追記

makedummies 関数の作者の方から、コメントで情報をいただきました。 以下のように、 install_github で 簡単に makedummies が使えるようになっています。

## devtools がなければインストール→ install.packages("devtools")
library(devtools)
install_github("toshi-ara/makedummies")

●2016年1月3日 追記

makedummies がさらに便利になりました。詳細は↓です。
http://hikaru1122.hatenadiary.jp/entry/2015/12/30/213032

以上、追記おわり。

 

今回のモチベーション

最近、ずっとカテゴリカルデータをいじっていて、ダミー変数を作る機会が出てきました。Rでダミー変数を作るのには、パッケージがあったはずだと思い、調べていたら、こちらの2つがみつかりました。

 
dummyVars についてはこちら。 estrellita.hatenablog.com

 
dummy.data.frame についてはこちら。 qiita.com

 

makedummies 関数

ただ、これらはダミー変数を作るときに基準となる変数もそのまま作ります。なので、基準となる変数のダミーはいりません。勝手に基準となるダミーを作らない関数がないかと探ししたところ、ありました。

 
それがこちらの makedummies 関数です。 github.com

 
作ってくださった方に感謝です。データフレームしか受け付けないので、その点だけ注意すればダミー変数が簡単につくれます。github のソースをコピーして、適当なファイルに保存して、適当なフォルダに入れておきます。今回は、makedummies.R というファイルにして、getwd() で表示されるフォルダに入れています。

source("makedummies.R")
> d <- read.delim("clipboard")
> str(d)
'data.frame':   18 obs. of  2 variables:
 $ y: int  5 7 4 6 6 6 6 6 7 5 ...
 $ x: int  1 2 3 1 2 3 1 2 3 1 ...
> head(d)
  y x
1 5 1
2 7 2
3 4 3
4 6 1
5 6 2
6 6 3

 
x のダミー変数を作りたいと思います。x が2のときに「1」となるダミー、x が3のときに「1」となるダミーを作ります。1は基準なのでダミーはいりません。ダミー変数としたいものは、因子型である必要があるので、因子型に直します。

> d$x <- factor(d$x)
> str(d)
'data.frame':   18 obs. of  2 variables:
 $ y: int  5 7 4 6 6 6 6 6 7 5 ...
 $ x: Factor w/ 3 levels "1","2","3": 1 2 3 1 2 3 1 2 3 1 ...

 
順序付きのカテゴリカル変数でもOKです。あとは makedummies 関数に入れるだけ。自動的に変数名がつきます。無事、基準となる変数はダミーが作られていません。ちなみに、複数の因子型変数がある場合、全部ダミー変数を作ります。

> d2 <- makedummies(d)
> head(d2)
  y x_2 x_3
1 5   0   0
2 7   1   0
3 4   0   1
4 6   0   0
5 6   1   0
6 6   0   1

私には重宝する関数です。改めて感謝。

 
ちなみに、カテゴリカルデータの分析はこちらの2冊が勉強なりました。

カテゴリカルデータ解析 (Rで学ぶデータサイエンス 1)

カテゴリカルデータ解析 (Rで学ぶデータサイエンス 1)

人文・社会科学のためのカテゴリカル・データ解析入門

人文・社会科学のためのカテゴリカル・データ解析入門

Rによる級内相関係数(ICC)の2つの出し方

2~3ヶ月前から、マルチレベル分析*1を学んでいます。分析自体はできます(便利なことに、コード1行でできるので)。しかし、手持ちのデータでマルチレベル分析を使うべきなのかどうか、迷います。そんなときは級内相関係数(ICC)を確認するのが一般的なようです*2。例によって、ウェブ上で情報収集しました*3

 

使うデータ

あるサービスの500人分の満足度を1~7で集計したもの。性別(男性0、女性1)も記録している。

> cs <- read.delim("clipboard")
> head(cs)
  gender manzoku
1      0       5
2      0       6
3      0       4
4      0       5
5      0       4
6      1       6

 

ICCの出し方

1.lmerTest または lme4 パッケージのlmerを使う。
切片だけの変量効果を調べます。summary()を使って、Random effectsのVarianceを計算してICCを出します。すなわち、

gender の Variance ÷(gender の Variance+ Residual の Variance)

です。今回はとっても低い値になります。マルチレベル分析をする必要はなさそうです。

> library(lmerTest)
> icc_by_lmerTest <- lmer(manzoku ~ 1 + (1|gender), data = cs)
> summary(icc_by_lmerTest)
※前略
Random effects:
 Groups   Name        Variance  Std.Dev.
 gender   (Intercept) 2.497e-14 1.58e-07
 Residual             1.742e+00 1.32e+00
※後略

2.ICCパッケージのICCestを使う。
x がグループ、y が対象となるデータ、data がデータフレームです。x は因子型でないと怒られます。

> library(ICC)
> icc_by_ICCest <- ICCest(x = gender, y = manzoku, data = cs)
Warning message:
In ICCest(x = gender, y = manzoku, data = cs) :
  'x' has been coerced to a factor
> icc_by_ICCest <- ICCest(x = factor(gender), y = manzoku, data = cs)
> icc_by_ICCest
$ICC
[1] -0.002186884

 
なんだか、lmerTest を使った計算方法と結果が違います。でも、とても小さい値なので、やはりマルチレベル分析をする必要はなさそうです。なお、ICC の数値が違います。計算方法が違うので、どちらが正しいものかはわかりません…。今回はどちらも小さな値になったので、よかったものの、微妙な値だったらどうしようか…。

 
番外 psychパッケージのICCを使う。
psych パッケージの説明を読んだんですが、データの形式がちょっと違っていたので、面倒そうでやめました。

 

参考にしたページ

*1:一般線形混合モデル、階層線形モデル。

*2:『Rによる心理学研究法入門』の7章に書いてあるそうです。買っているけど、読んでなかった…。出張中ゆえ、手元にありません。

*3:なお、HADを使えばエクセルで簡単にできます。でも、今回はRを使ってICCを出すということで除きました。

読了 『完全独習 ベイズ統計学』(2015)

個人的に大きなイベントが終わり、うまくいきそうなので、学びと研究を再開です。

 
リハビリとして、今年11月に出版された『完全独習 ベイズ統計学入門』を読んで、ブログを書きます。本の詳細は下をクリックしてください。

完全独習 ベイズ統計学入門

完全独習 ベイズ統計学入門

 
『図解・ベイズ統計「超」入門』より、もう少し計算などを使ってベイズ統計を学んでいく本のように感じました。したがって、『図解・ベイズ~』などのベイズ統計を紹介する本を1冊でも読んだことがある人は苦しまずに読みきれると思います。

 
『完全独習 ベイズ~』は面積図などを使って、あの手この手でわかりやすく説明をしてくれます。『基礎からのベイズ統計学』がさっぱりわからないという方は、この『完全独習 ベイズ~』を読んでみるといいのではないかと思いました。逆に『基礎からの~』を読んだ方は必要がないというか、『完全独習 ベイズ~』の第2部を立ち読みでくらいでいいんじゃないかと。

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

 
今回の本でもっともよかったのは最後のブックガイドです。ベイズ統計への理解を深めるために次はこういう本を読めばいいのだな、と教えてくれます。その中の1冊にチャレンジしたいと思います(RやStan関連の本の紹介はありません)。

 
とにかくこれから勉強したい方にこういうのがあるよ、とオススメできる本が増えたのは嬉しいです。

統計学エンドユーザーのための JAGS 入門

岩波データサイエンス vol.1 のどこかのページに「初心者はJAGS(BUGS)」と書いてあったので*1、こつこつ学び始めています。世の中は Stan 大人気ですが、気にしない…。まず JAGS に慣れてから Stan をやります…。本エントリーは、前回のエントリーと多くがかぶっています。

 
今回は、次のページを参考にさせていただいています。

生態学のデータ解析 - R で JAGS (rjags 編)
http://hosho.ees.hokudai.ac.jp/~kubo/ce/RtoJags.html

生態学のデータ解析 - JAGS
http://hosho.ees.hokudai.ac.jp/~kubo/ce/JagsMisc.html

 
分析に使用したのは、JAGS 4.0.0 および rjags 4.4 です。

 

JAGS と rjags のインストール

JAGS と rjags はそれぞれ別にインストールします。JAGS 3.0 系 をインストールしていて、rjags 4.4 にしていた場合は動きません。JAGS も4にする必要があります。

 
JAGS はこちらから .exe をダウンロードできます。
http://sourceforge.net/projects/mcmc-jags/files/

rjags はいつもの install.packages でOKです。

 

分析の手順

1.データの準備

今回は先ほどの「RでJAGS(rjags 編)」のデータを使用しました。上記ページにある csv ファイルから、ページのとおりにデータをセットします。JAGSに渡すデータはリスト形式である必要があります。

 

2.モデルを作る

「RでJAGS(rjags 編)」にあるモデルを自分なりにいじってみました。いまのJAGSマニュアルによると、行末にセミコロンは不要のようです。モデルを作る前に図解しました。これも岩波データサイエンスにそうしろ、と書いてあったように思います。分布の形はテキトーです*2

f:id:hikaru1122:20151120002559j:plain

 
さて、モデルです。ロジスティック回帰でリンク関数はロジットリンクです。詳しくはみどりぼん第6章を参照してください。

Model <-"
model{
    for (i in 1:N) {
        Positive[i] ~ dbin(p[i], Total[i])
        logit(p[i]) <- z[i]
        z[i] <- beta[1] + beta[2] * Logdose[i]
    }
    beta[1] ~ dnorm(0, tau)
    beta[2] ~ dnorm(0, tau)
    tau ~ dgamma(1.0E-6, 1.0E-6)
}
"

 

追記2015年11月20日
そういえば、JAGS の dnorm の分散は逆数でした。
tau <- 1/(sd*sd)
sd ~ dgamma(1.0E-3, 1.0E-3)
がより正しい書き方なのかな…?
また、twitter にてアドバイスをいただきました。
一様分布や半コーシー分布のほうがよい、とのことです。
ありがとうございます。

 
いちばんの変更点は tau の事前分布です。一度、同じように dgamma(1.0E-3, 1.0E-3) でやってみたのですが、うまく行きませんでした。代わりに、dgamma(1.0E-6, 1.0E-6) を使いました。

 
その理由は2つあります。
(1)JAGS 4.0 マニュアルに載っていた例で dgamma(1.0E-6, 1.0E-6) が使われていたこと
(2)前回のエントリーで dgamma(1.0E-6, 1.0E-6) を使ってやり直したら、Stan とほぼ同じ結果が得られたこと
です。1.0E-3 と 1.0E-6 で結果が変わるのってシビア。事前分布って難しい。

 
モデルを書いたら、書き出します。

writeLines(Model, con ="testModel.txt") # 拡張子は特に不要ですが、いちおう。

 

3.MCMCする

モデルを jags オブジェクトにしていきます。

# rjags のロード。
library(rjags)
# jags モデルを作る。
testModel <- jags.model(file = "testModel.txt", data = list.data, n.chain = 3)

 
jags.model の file = は別ファイルである必要があります。なので、先ほど書きだした次第です。次にバーンイン、そして本格的なサンプリングを行います。n.chain は2以上でないと、後で Gelman & Rubin 収束診断指標のグラフが描けないようなので、3にしています。初期値は設定していません。まだ理解できていないので。

 
では、本格的なMCMCサンプリングを行います。

# バーンイン期間のための試運転。
update(testModel, n.iter = 1000)
# 本番。MCMC サンプルを kekka に収める。
kekka <- coda.samples(
            testModel,
            variable.names = c("beta[1]", "beta[2]", "tau"),
            n.iter = 20000)

 
coda.samples の variable.names では結果で見たいパラメータを文字列として指定します。これで、下ごしらえは終わりました。rjags パッケージで使うのは、jags.model, update, coda.samples の3つだけです。writeLines は普通に使えます。

 

結果を見る。

収束診断をします。codamenu() でメニューを選びながら、確認します。引数はいらないです。メニューで「2→kekka(MCMCサンプリングを格納したオブジェクト)→2→2」とするとGelman & Rubin の指標が見られます。1.1 より下なので、収束しているようです。他にもcodamenu()でいろいろ指標を選べます。

Potential scale reduction factors:
        Point est. Upper C.I.
beta[1]       1.01       1.02
beta[2]       1.01       1.02
tau           1.00       1.00

 
図でも確認します。plot(kekka)です。

f:id:hikaru1122:20151120011135p:plain

 
推定値は summary(kekka) で確認します。

> summary(kekka) 
            Mean      SD  Naive SE Time-series SE
beta[1] -5.99179 1.10916 0.0045281       0.053419
beta[2]  1.18754 0.19647 0.0008021       0.009398
tau      0.06042 0.07121 0.0002907       0.001165

 
「RでJAGS(rjags 編)」ページに書いてある「真の値」は、 beta[1] = -5.0、beta[2] = 1.0 です。けっこう近づきました。tau だけはダメでした。図示します。

f:id:hikaru1122:20151120011149p:plain

 
少しずつ、JAGS に慣れてきたようです。今後、みどりぼんや岩波データサイエンスの例にも取り組んでいきたいと思います。

 

参考文献

JAGS マニュアル http://sourceforge.net/projects/mcmc-jags/files/Manuals/4.x/

rjags マニュアル https://cran.r-project.org/web/packages/rjags/rjags.pdf

生態学のデータ解析 - R で JAGS (rjags 編) http://hosho.ees.hokudai.ac.jp/~kubo/ce/RtoJags.html

生態学のデータ解析 - JAGShttp://hosho.ees.hokudai.ac.jp/~kubo/ce/JagsMisc.html

岩波データサイエンス

岩波データサイエンス Vol.1

岩波データサイエンス Vol.1

みどりぼん

DBDA2

Doing Bayesian Data Analysis, Second Edition: A Tutorial with R, JAGS, and Stan

Doing Bayesian Data Analysis, Second Edition: A Tutorial with R, JAGS, and Stan

*1:出張中でいま手元になく、どのページかわかりません…。

*2:矢印は上向きのほうがいいのかな。

JAGS と Stan と lm

ここ最近、GLM や GLMM の学び直しをしていました。みどりぼんも2周目になり、6~7割は理解できるようになったと思います。そこで、唐突ですが3ヶ月ほど前に Stan&Rstan でやった、単回帰分析を JAGS&rjags でやります。元ネタ(?)はこちら。 hikaru1122.hatenadiary.jp

 
JAGS を使うにあたって参考にした書籍はこちら(以下、DBDA2 と呼びます)。また、JAGSのユーザーマニュアルもざっと読みました。

Doing Bayesian Data Analysis, Second Edition: A Tutorial with R, JAGS, and Stan

Doing Bayesian Data Analysis, Second Edition: A Tutorial with R, JAGS, and Stan

sourceforge.net

 
DBDA2 の第8章でやっと JAGS を使った分析例が出てきます。DBDA2 による JAGS を使ったベイズ推定の手順は次のとおりです*1。勝手に3つの段階「準備する→MCMCする*2→結果を見る」にわけてみました。

 

<準備する>

1.分析するデータを準備する。
2.リスト形式でまとめる。…A
3.モデルを作る。
4.モデルを書き出す。…B
5.(初期値を設定する…C)
※5は必ずしも必要ではない。

 

MCMCする>

1.JAGSにすべての情報(A,B,C)を渡す。
→ rjags::jags.model を使う。

2.バーンイン期間のために空回しする。 → rjags::update を使う。

3.結果を記録する → rjags::coda.samples

 

<結果を見る>

・収束しているかどうか確認する。
→ 著者が用意してくれた diagMCMC を使う*3

・事後分布を確認する。
→ mode, median, mean を確認。mode がいちばんいいけど、不安定なことももある。median がたいていいちばん安定している。
→ 著者が用意してくれた plotMCMC を使う*4

 
では、やってみます。分析するデータは「アイスクリーム統計学」からお借りします。 http://kogolab.chillout.jp/elearn/icecream/chap4/sec1.html

 

<準備する>
icecream <- read.delim("icecream.txt")
kyaku <- icecream$kyaku
kion <- icecream$kion
Ntotal <- length(kyaku)

# JAGS に渡すデータをリスト形式で作る。
bunsekiData <- list(
    kyaku = kyaku,
    kion = kion,
    Ntotal = Ntotal
)

# モデルを作る。
Model <-"
model{
    for(i in 1:Ntotal){
    kyaku[i] ~ dnorm(mu[i], tau)
    mu[i] <- alpha + beta * kion[i]
    }
    alpha ~ dnorm(0, 1.0E-4) #事前分布はこれでいいの?
    beta ~ dnorm(0, 1.0E-4) #事前分布はこれでいいの?
    tau ~ dgamma(1.0E-3, 1.0E-3) #事前分布はこれでいいの?
}
"

#モデルを書き出す。
writeLines(Model, con = "icecreamModel.txt")

 

MCMCする>
#rjags をロード。
library(rjags)

# jagsオブジェクトを作る。初期値は設定せず、おまかせ。
haahaa <- jags.model(file = "icecreamModel.txt",
    data = bunsekiData, n.chains = 3, n.adapt = 500)

# バーンイン期間のための空回し。
update(haahaa, n.iter = 5000)

# MCMCサンプルを kekka に収める。知りたいパラメータは alpha(切片)と beta(偏回帰係数)。
kekka <- coda.samples(haahaa, variable.names = c("alpha", "beta"), n.iter = 100000)

 

<結果を見る>
source("DBDA2E-utilities.R") # これは DBDA2 の付録で付いてくる。

# DBDA2 著者作成の関数で収束診断。
diagMCMC(codaObject = kekka, parName = "alpha")
diagMCMC(codaObject = kekka, parName = "beta")

# DBDA2 著者作成の関数で事後分布を見る。mean, mode, median をそれぞれ見てみる。
par(mfrow=c(2,3))
plotPost(kekka[,"alpha"], main = "alpha", xlab = bquote(alpha), cenTend = "mean")
plotPost(kekka[,"alpha"], main = "alpha", xlab = bquote(alpha), cenTend = "mode")
plotPost(kekka[,"alpha"], main = "alpha", xlab = bquote(alpha), cenTend = "median")
plotPost(kekka[,"beta"], main = "beta", xlab = bquote(beta), cenTend = "mean")
plotPost(kekka[,"beta"], main = "beta", xlab = bquote(beta), cenTend = "mode")
plotPost(kekka[,"beta"], main = "beta", xlab = bquote(beta), cenTend = "median")

 
収束はしているようです(下図のそれぞれ左上と左下)。 f:id:hikaru1122:20151118171650p:plain f:id:hikaru1122:20151118171705p:plain

 
切片と係数は次のとおりです。それぞれ3つ出してみます。 f:id:hikaru1122:20151118171852p:plain

 
median を採用するとしたら、回帰式は

{ \displaystyle
客数 = -145 + 14.6*気温
}

ということですよね。

 
同じデータを lm でやった結果は次のとおりです。

> kekka_lm <- lm(kyaku ~ kion, data=icecream)
> summary(kekka_lm)

Call:
lm(formula = kyaku ~ kion, data = icecream)

Residuals:
    Min      1Q  Median      3Q     Max 
-47.969 -17.709  -1.218  17.413  51.031 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -229.98      73.79  -3.117  0.00596 ** 
kion           17.25       2.30   7.499 6.08e-07 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 29.54 on 18 degrees of freedom
Multiple R-squared:  0.7575,    Adjusted R-squared:  0.744 
F-statistic: 56.23 on 1 and 18 DF,  p-value: 6.082e-07

Stan での結果も再掲します。

         mean se_mean    sd    2.5%     25%     50%     75%  97.5% n_eff Rhat
alpha -230.75    0.57 80.23 -389.66 -282.82 -230.41 -178.89 -72.06 19789    1
beta   17.27    0.02  2.50   12.32   15.66   17.26   18.90  22.23 19771    1

 
Stan&Rstan でやると lm とほぼ同じ結果が得られたんですが、今回の JAGS だとなんか違います。事前分布の設定が悪かったのかな…。それとも初期値の設定が必要だったのか。それとも分析するデータが少なすぎるとか。やっとモデルを作る、見るのに慣れてきたと思ったら、また次の難問が出てきました。厳しい…。

 
しかし、Stan よりは JAGS のほうがとっつきやすい気がします。しばらく慣れ親しんでみようと思います。

*1:Stanでも大きくは変わらないと思うのですが、念のため

*2:MCMCするという謎な日本語は許してください。

*3:ダウンロード先は、https://sites.google.com/site/doingbayesiandataanalysis/software-installation

*4:上に同じ。

「ドットなしRprofile」に気をつけよう。最近の R 事件簿

ここ1~2週間、R関連の不具合で消耗していました。たぶん、私のような憂き目にあう人はいないかと思いますが、いちおう備忘録として書いておきます。

 

1.以前動いていた Rstan が動かない。

glmmstan が便利そうだなと思って、使ってみたのですが、コンパイルエラーで止まりました。windows10 にアップグレードする前にはちゃんと動いていたのですが…。TJOさんのブログ(↓)を読んで、自分の設定に間違いながないことを確認。

tjo.hatenablog.com

先週土曜日の夜から日曜日の夕方まで解決策を探しました。R や RStudio の再インストールを数度。古い情報ですが、R を半角スペースのあるディレクトリにインストールしてはダメ、というものあったので、そのとおりにして再インストールもしました。

 
入れなおした R でやっと Rstan が動き出したのに喜んで、RStudio で同じことやったら動かないという不可解な現象も起きました。何度かトライしているうちに、自分が「Rprofile」をいじっているのがダメなのでは、という結論に至りました。

 
R を起動したときに作業するディレクトリに自動的に移動したり、自動的にパッケージを呼び出すようにするアレです。
参考はこちら。
Rprofile | パッケージの自動ロードなど

 
通常、そういう設定はホームディレクトリに「.Rprofile(ドットあり)」を作ってその中に書くものですが、私は「Rprofile(ドットなし)」に setwd(指定場所) を書いていたのです。どっちでもいいじゃん、と思っていたので。

 
実際、Rstan を使わない場合、ドットなしの Rprofile に setwd() を書いても問題なく動いていたので、まったく気づきませんでした。ちなみに、ドットなし Rprofile は R をインストールした先の /library/base/R の中にあります。

 
そこで、ちゃんとホームディレクトリに .Rprofile を作って、そこに setwd() を書いて保存しました。glmmstan も無事動きました。

 

2.Sublime Text3から、Rgui が呼び出せなくなった。

前回のブログで書いたネタですが(↓)、

hikaru1122.hatenadiary.jp

 
Sublime で R のコードを書いて、Ctrl+Enter を押しても、まったく反応しなくなりました。ネットの海をさまよい歩いても解決策が見つからず。何回か再インストールしてもダメでしが、1日放置すると元に戻りました。原因不明のまま解決。

 

3.RStudio で日本語を使うと落ちる。再現率100%。

この現象を人に言うと、たいていビックリされます。変数名や変数に日本語がなくても、plot(y ~x , data = z, main ="日本語だよ") としても100%再起動されます。それを実際に見せると、またビックリされます。現在、解決策不明です。

 
以上、R まわりの事件簿でした。どなたか3についての解決策をお教えください…。なお、glmmstan はこちらです。たいへん便利です。

github.com

RStudio より軽くてサクサク。Sublime で R コンソールと連携

【追記 2016年4月26日】
sulibme text3 で R-box が動くという情報をいただいています。 コメント欄をご参照ください。

【追記 2016年3月24日】
私の環境(windows10, sublime text3)ではうまく動いていません。
現在はRstudio 使ってます…。


このブログの統計分析については、いっしょに学べる仲間・先輩・上司がいるような「プロ環境(?)」にいる方ではなくて、普段は孤独に、もしくは趣味的に楽しくRと格闘している非ITエンジニアな方(つまりは自分なんですけど)向けに書いています。

 
さて先日、RStudio で日本語の扱いが変になってしまいました。変数の中に日本語が入っていると、落ちてしまうのです。変数名をローマ字にしても、変数の中に日本語があればダメ。少し前までは平気でした。ひょっとしたら、Windows10 へのアップグレードのせいかな…。 f:id:hikaru1122:20151030154617p:plain

 
原因はわからないですが、快適な分析環境に身をおきたいので、RStudio 以外の環境を作ることにしました。以前のエントリーで、Sublime を使おうとしたところ挫折したことの再チャレンジです。

 
Sublime Text から R を使うのには「Sublime REPL」を使う方法がよくネット上で紹介されています。例えば、こちらの2つです。 weathercook.hatenadiary.jp www.kevjohnson.org

 
Sublime REPL から R を使う方法は2つあります。1つは、Sublime の画面を2つに割って、片方に R コンソール、もう片方にコードを書くようにして、書いたコードをRコンソールに渡すという流れです。↓な感じ。 f:id:hikaru1122:20151030154524p:plain

 
もう1つは画面分割せずに Sublime 内で R を実行するだけ。どの方法も日本語の扱いにはまったく問題ありません。しかし、Sublime REPL は画面分割したとき動きがちょっと不安定で、書いたコードを隣のRコンソールに渡す時のショートカットキーがうまくいかないときがあります。画面分割しないと、エディタを使う意味ないし…。

 

R-Box を使う方法がある!

というわけで、違う方法を探しました。結果として、R-Box というプラグインを導入することで、RStudio よりもサクサク動く環境を作ることができました。Sublimeプラグイン導入方法や設定などは他ページをご覧ください。例えば↓。

http://keidrun.tumblr.com/post/73033053898/tipssublime-text-sublime-text

 
R-Box 導入後、Sublime のメニューで「 Preferences → Package Settings → R-Box →Settings - Users」で R-Box の設定ファイルを適切なものに書き換えます。R のプログラムがある場所を適切なものにするだけです。私の場合はこんな感じ。バックスラッシュは2つ必要です。

{
    "R64": "C:\\Program Files\\R\\R-3.2.2\\bin\\x64\\Rgui.exe",
    "prog": "R64"
}

 
Rを使うときは、Sublime の画面の右下にある「Plain Text」をクリックして「R-Box→R Extended」を選択。

f:id:hikaru1122:20151030154553p:plain

 
適切なコードを書いて、RStudio と同じように「Ctrl+Enter」をすると、R コンソールが現れて、実行されます。こんな感じ。 f:id:hikaru1122:20151030154451p:plain

 
日本語変数名・変数は問題ありません(いまのところ)。動作も機敏です。ちょっと不便なのは、read.delim("clipboard") が使えないことです。手抜きせず read.csv() とかを使えばOKです。めでたし、めでたし。しばらくはこれでやってみます。

でも、早く RStudio の不具合が解消して、日本語が普通に使えるようになればいいな。

 

【追記】
1.「軽くてサクサク」は起動のスピードのことを指しています。サクサクの表現は、さっと使いたいときにさっと使える私の気持ちです。わかりづらくてスミマセン。
2.r-wakalang で質問したときは、RStudio でほぼ問題なく日本語を使える方がいらっしゃいました。今回の問題は、私が使っているデータが原因かもしれません。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。