MacのRStanのインストールエラー

メモ

環境

  • MacOS 10.15.4
  • R 3.6.3

エラー

install.package("rstan")

こんなえらー

unistd.h:727:31: error: unknown type name 'uuid_t'; did you mean 'uid_t'?

対策

RからこれでOK

install.packages("Rcpp", repos="https://RcppCore.github.io/drat")

Rstudioの環境変数

RStudioを好んで使っています。

Mac版RStudioはHomeBrewでインストールすることができます

brew cask install rstudio

この時、アプリケーションフォルダ内にRStudioのアイコンが表示されます。
このアイコンをクリックして起動すると、Bashシェルの環境変数を読み込んでくれません。

自分の場合、データフォルダをDATA環境変数に入れることにより、大学で使っている
サーバのデータフォルダとの物理ディレクトリの違いを吸収するようにしています。
例えば


data.file<-paste(Sys.getenv("DATA"),"/sample.txt",sep="")

こんな感じで記述しておけば、
サーバでは /work/user/data/sample.txtのディレクトリにあるファイル
ローカルPCでは /home/user/data/sample.txtのディレクトリにあるファイルでも、
環境変数DATAにサーバでは/work/user/data/、ローカルPCでは/home/user/data/
を設定しておけば、プログラムを変更する必要がありません。

しかし、Rstudioを入れたそのままではこの環境変数が使えません。

これを解決するには、~/.Renvironに環境変数を記述しておけばOKです。

~/.Renviron

DATA=${HOME}/data

R.3.4.3にmxnetをインストール

mxnetのインストールがエラーになるのでその対処方法

環境

mxnetを使用する際に,インストール方法が公式サイトにも書いているのですが,
その方法ではインストール時にエラーが出ます。使っている環境がMacだからなのかもしれませんが。。

  • OS:MacOS 10.13.3
  • R 3.4.3 brewでインストールしたもの

この環境で下記コマンドでインストール

> install.packages("mxnet", type = "el-capitan.binary")
Installing package into ‘/usr/local/lib/R/3.4/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  package ‘mxnet’ is not available (for R version 3.4.3)

どうやらVersionがあっていないようでインストールできないようです。
ググっていろいろなやり方を試したのですがダメ。

> cran <- getOption("repos")
> cran["dmlc"] <- "https://s3-us-west-2.amazonaws.com/apache-mxnet/R/CRAN/"
> options(repos = cran)
> install.packages("mxnet")
Installing package into ‘/usr/local/lib/R/3.4/site-library’
(as ‘lib’ is unspecified)
 URL 'https://s3-us-west-2.amazonaws.com/apache-mxnet/R/CRAN/src/contrib/mxnet_0.10.1.tar.gz' を試しています 
Warning in install.packages :
  cannot open URL 'https://s3-us-west-2.amazonaws.com/apache-mxnet/R/CRAN/src/contrib/mxnet_0.10.1.tar.gz': HTTP status was '404 Not Found'
Error in download.file(url, destfile, method, mode = "wb", ...) : 
   URL 'https://s3-us-west-2.amazonaws.com/apache-mxnet/R/CRAN/src/contrib/mxnet_0.10.1.tar.gz' を開けません 
Warning in install.packages :
  download of package ‘mxnet’ failed

> install.packages("mxnet", type = "mac.binary")
Installing package into ‘/usr/local/lib/R/3.4/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  unable to access index for repository https://cran.rstudio.com/bin/macosx/contrib/3.4:
   URL 'https://cran.rstudio.com/bin/macosx/contrib/3.4/PACKAGES' を開けません 
Warning in install.packages :
  unable to access index for repository https://s3-us-west-2.amazonaws.com/apache-mxnet/R/CRAN/bin/macosx/contrib/3.4:
   URL 'https://s3-us-west-2.amazonaws.com/apache-mxnet/R/CRAN/bin/macosx/contrib/3.4/PACKAGES' を開けません 

   package ‘mxnet’ is available as a source package but not as a binary

Warning in install.packages :
  package ‘mxnet’ is not available (as a binary package for R version 3.4.3)

> install.packages("mxnet", type = "el-capitan.binary")
Installing package into ‘/usr/local/lib/R/3.4/site-library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  package ‘mxnet’ is not available (for R version 3.4.3)

対処方法

ここここの方法でようやくインストールできました。

opencv

まずOpenCVをインストール

brew install opencv

openblas

OpenBlasも入れます

brew install openblas

mxnet

最後にソースコードからダウンロードしてインストールします

git clone --recursive https://github.com/dmlc/mxnet
cd mxnet
cp make/osx.mk config.mk
make -j4
make rpkg

確認

これでインストールが終わっています

$ R

R version 3.4.3 (2017-11-30) -- "Kite-Eating Tree"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin17.4.0 (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。 
一定の条件に従えば、自由にこれを再配布することができます。 
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。 

R は多くの貢献者による共同プロジェクトです。 
詳しくは 'contributors()' と入力してください。 
また、R や R のパッケージを出版物で引用する際の形式については 
'citation()' と入力してください。 

'demo()' と入力すればデモをみることができます。 
'help()' とすればオンラインヘルプが出ます。 
'help.start()' で HTML ブラウザによるヘルプがみられます。 
'q()' と入力すれば R を終了します。 

> library(mxnet)
>

これで使えそうです。多分。

リモートでJupyter Notebookをつかう

大学のサーバでどうしてもJupyter Notebookが動かしたいのでメモ。

経緯

データをSQLiteで管理しており,これのサイズが10Gを超え始めた。計算などは大学のサーバで行なっているのであるが,RやJupyterなどビジュアルなツールを使いたい時にはいちいちローカルのPCへSQLiteをコピーするのが大変。

以前Xサーバを使ったリモートでの起動を試したが,どうも使いづらい。
Macからだと,XQuartzをあらかじめMacにインストールしておき,
以下のSSHコマンドで接続し,

[mac] $ ssh -Y remotehost

Jupyterを起動するだけ。

[server] $ jupyter notebook

これで,リモートサーバでFirefoxが立ち上がり,MacのXQuartzで表示される。
しかしこれがいかんせん使いづらい。遅いし,サーバ側のFirefoxなので見た目も悪く,日本語入力も一苦労。

設定

Jupyter

まずはここを参考に設定する。

$ jupyter notebook --generate-config

~/.jupyter/jupyter_notebook_config.pyを編集。ポートが8080が空いている場合には以下のように指定する。

c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8080

R

Rも使いたいので,ここを参考にRを起動してインストール。

install.packages(c('repr', 'IRdisplay', 'crayon', 'pbdZMQ', 'devtools'))

devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()  

起動

$ jupyter notebook

[I 17:43:07.065 NotebookApp] Serving notebooks from local directory: /tmp
[I 17:43:07.066 NotebookApp] 0 active kernels
[I 17:43:07.066 NotebookApp] The Jupyter Notebook is running at:
[I 17:43:07.066 NotebookApp] http://0.0.0.0:8080/?token=37e418b82da8472bf89798f70a92dda90003f61509xxxxx

起動時に現れるこれから,

http://0.0.0.0:8080/?token=37e418b82da8472bf89798f70a92dda90003f61509xxxxx

以下のようにPCのブラウザのアドレスバーに打ち込めばOK

http://server:8080/?token=37e418b82da8472bf89798f70a92dda90003f61509xxxxx

gcc6でRMecabのインストールはエラー

大学のサーバのGCCが6.2だったのでメモ。

RMeCabのインストール

> install.packages("RMeCab", repos = "http://rmecab.jp/R")

エラーになる。

RMeCab.cpp:89:11: error: narrowing conversion of '229' from 'int' to 'char' inside { } [-Wnarrowing]
          0}; //形容詞

GCC6だとエラーになるので、GCC5台にしないと駄目です。

因みにソースコードはinstall.packageのときにオプションを付けると消されないでローカルファイルに残ります。

> install.packages("RMeCab", repos = "http://rmecab.jp/R",keep_outputs=T)

Rをソースコードからインストール

スーパーユーザ権限のないサーバにソースコードからインストールしてみたのでそのメモ

大学のサーバなど勝手になんでもインストールできない環境ではローカルのユーザ環境に色々とインストールしないといけません。今回はRをインストールしてみました

Rの取得

cranからRのソースコードをダウンロードしコンパイルします

wget https://cran.r-project.org/src/base/R-3/R-3.3.2.tar.gz
tar zxvfp R-3.3.2.tar.gz
cd R-3.3.2
mkdir builddir
cd builddir
../configure --prefix=/work/$USER/local --with-cairo --with-jpeglib --with-readline --with-tcltk --with-blas --with-lapack --enable-R-profiling --enable-R-shlib --enable-memory-profiling 

エラーになります

checking if bzip2 version >= 1.0.6... no
checking whether bzip2 support suffices... configure: error: bzip2 library and headers are required

足りないライブラリを入れていきます

bzip2

wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar zxvfp bzip2-1.0.6.tar.gz
cd bzip2-1.0.6

このあたりを参考にMakefileを修正しておきます。CFLAGSに-fPICを追加します

CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES)

makeします

make -f Makefile-libbz2_so
make clean
make
make -n install PREFIX=/work/$USER/local
make install PREFIX=/work/$USER/local

Rのconfigを再開します。この際、オプションにライブラリのパスを入れます

../configure --prefix=/work/$USER/local --with-cairo --with-jpeglib --with-readline --with-tcltk --with-blas --with-lapack --enable-R-profiling --enable-R-shlib --enable-memory-profiling CPPFLAGS="-I/work/$USER/local/include" LDFLAGS="-L/work/$USER/local/lib"

またエラーです

checking for lzma_version_number in -llzma... no
configure: error: "liblzma library and headers are required"

xz

xzライブラリを入れます。

wget http://tukaani.org/xz/xz-5.2.3.tar.gz
tar zxvfp xz-5.2.3.tar.gz 
cd xz-5.2.3
./configure --prefix=/work/$USER/local
make install

Rのconfigを再開

../configure --prefix=/work/$USER/local --with-cairo --with-jpeglib --with-readline --with-tcltk --with-blas --with-lapack --enable-R-profiling --enable-R-shlib --enable-memory-profiling CPPFLAGS="-I/work/$USER/local/include" LDFLAGS="-L/work/$USER/local/lib"

またエラー

checking for pcre_fullinfo in -lpcre... no
checking whether PCRE support suffices... configure: error: pcre >= 8.10 library

pcre

pcreライブラリを入れる。ここで、UTF8を有効にしておきます

wget https://ftp.pcre.org/pub/pcre/pcre-8.10.zip
unzip pcre-8.10.zip 
cd pcre-8.10
./configure --prefix=/work/$USER/local/ --enable-utf8
make install

Rのconfigを再開

checking if libcurl is version 7 and >= 7.28.0... no
configure: error: libcurl >= 7.28.0 library and headers are required with support for https

またエラーです

curl

wget --no-check-certificate https://curl.haxx.se/download/curl-7.47.1.tar.gz
tar zxvfp curl-7.47.1.tar.gz 
cd curl-7.47.1
./configure --prefix=/work/$USER/local
make -j3
make install

Rのconfigを再開

../configure --prefix=/work/$USER/local --with-cairo --with-jpeglib --with-readline --with-tcltk --with-blas --with-lapack --enable-R-profiling --enable-R-shlib --enable-memory-profiling CPPFLAGS="-I/work/$USER/local/include" LDFLAGS="-L/work/$USER/local/lib"

成功しました

コンパイル

make

またエラー。。

/work/xxxxx/work/R-3.3.2/builddir/bin/exec/R: /usr/lib64/libgomp.so.1: version `GOMP_4.0' not found (required by /work/xxxxx/work/R-3.3.2/builddir/lib/libR.so)

これは使っているGCCとそのライブラリがずれていたためでした。
LD_LIBRARY_PATHに使っているGCCのライブラリパスを前の方に追加し再度make

make
make install

これでOKです。

Rで株価データ取得

Rで株価データの取得のメモ
quantmodは素晴らしい!!

DOW

DowはYahoo.comから取得します。srcに”yahoo”をセット

library(quantmod)

# DOW
dow<-new.env()
dow.name<-getSymbols("DOW",env=dow,src="yahoo", from='2016-01-01',to='2016-06-30')
dow.prices<-dow[[dow.name]]
names(dow.prices)<-c("Open","High","Low","Close","Volume","Adjusted")

デフォルトの名前では使いづらいので、必要なデータを別のデータフレームに入れて名前をつけます。

> dow.prices["2016-02-01::2016-03-01"]
            Open  High   Low Close   Volume Adjusted
2016-02-01 41.58 42.77 41.22 42.58  8717200 41.44578
2016-02-02 44.14 45.18 42.82 45.03 16411000 43.83052
2016-02-03 45.73 47.05 45.70 46.74 16750300 45.49497
2016-02-04 46.93 47.64 46.73 47.39 13177300 46.12765
2016-02-05 47.48 47.50 46.41 46.69  8030600 45.44630
2016-02-08 46.46 46.94 45.20 46.23 13511300 44.99855
2016-02-09 45.71 47.20 45.71 46.60  8201200 45.35870
..

取得するデータはxts型ですので扱いやすいです

日本株

日本株はsrcにyahoojとYahooJapanを指定するだけです

jpn<-new.env()
jpn.name<-getSymbols("6758",env=jpn,src="yahooj", from='2016-01-01',to='2016-06-30')
jpn.prices<-jpn[[jpn.name]]
names(jpn.prices)<-c("Open","High","Low","Close","Volume","Adjusted")

> jpn.prices["2016-02-01::2016-03-01"]
             Open   High    Low  Close   Volume Adjusted
2016-02-01 2923.0 2924.0 2700.0 2836.0 32250000   2836.0
2016-02-02 2779.0 2812.0 2662.0 2692.5 18567800   2692.5
2016-02-03 2626.0 2654.5 2610.0 2623.5 15916000   2623.5
2016-02-04 2600.0 2657.0 2600.0 2620.5 10369200   2620.5
2016-02-05 2592.0 2638.5 2580.5 2615.0  8591500   2615.0
2016-02-08 2560.0 2592.0 2515.0 2569.0 10796100   2569.0
2016-02-09 2424.0 2444.0 2356.5 2388.5 13666800   2388.5

追記 19.06.18


上記のやり方ではどうやらエラーが出るようになりました。

> names(jpn.prices)<-c("Open","High","Low","Close","Volume","Adj")
 names(jpn.prices) <- c("Open", "High", "Low", "Close", "Volume",  でエラー: 
   NULL に対して属性を設定しようとしました 

取得方法がどうやら変わったのでしょうか?
下記のやり方でとれるようです

> library(quantmod)
> env<-getSymbols("9434.T", src="yahooj", from="2018-12-19",auto.assign=F)
> jpn<-as.data.frame(env)
> names(jpn)<-c("Open","High","Low","Close","Volume","Adjusted")
> head(jpn)
           Open High  Low Close    Volume Adjusted
2018-12-19 1463 1464 1282  1282 271497800     1282
2018-12-20 1183 1310 1176  1296 106361400     1296
2018-12-21 1279 1375 1275  1316  65040600     1316
2018-12-25 1307 1320 1240  1271  36914400     1271
2018-12-26 1300 1315 1288  1304  12116500     1304
2018-12-27 1350 1356 1325  1354  19368800     1354

shinyでデバッグプリントを出す方法

すぐ忘れるのでメモ

shinyとは

Rの軽量Webフレームワークshiny。Rで計算した結果をWebで簡単に表現できるので非常に便利です。

RStudioを使ってデバッグすればいいのでしょうが、サーバサイドでいきなりコーディングし、訳の分からないエラーが発生した時には非常に困ります。
簡単にデバッグする方法は以下のとおりです

ブラウザ

Chromeのメニューから「その他のツール」ー「デベロッパーツール」を選択します。
そのメニューからConsoleを表示させると、Javascriptでサーバ側のエラーを表示してくれます。
これは非常に便利。

デバッグプリント

ソースコード上にデバッグプリントを埋め込んで変数の内容を確認するには

cat(file=stderr(),"debug=",value)

こんな感じでserver.R上に記述します。これで /var/log/shiny-server以下のファイルに出力されます。

まとめ

Rはスクリプト言語なので、エラーになる直前までは普通に実行してくれますので、エラーとなる直前にデバッグプリントを仕込むと良いでしょう

Rのh2oでエラー対応法

H2Oパッケージを触っていてエラーが出たのでメモ

環境

  • ubuntu14.04
  • R-3.3.1
  • h2o-2.0.1

インストール

まずここを参考にインストールします

cmake

wget https://cmake.org/files/v3.6/cmake-3.6.1.tar.gz
tar zxvfp cmake-3.6.1.tar.gz 
cd cmake-3.6.1
./configure  
make
make install

h2o

wget https://github.com/h2o/h2o/archive/v2.0.1.tar.gz
tar zxvfp v2.0.1.tar.gz 
cd h2o-2.0.1/
cmake .
make
make install

設定

mkdir /usr/local/etc/h2o/
cd /usr/local/etc/h2o/
openssl genrsa 2048 > cert.key
openssl req -new -key cert.key  > cert.csr
openssl x509 -days 3650 -req -signkey cert.key < cert.csr > cert.pem
touch /usr/local/etc/h2o/error-log

起動

sudo /usr/local/bin/h2o -m daemon -c /usr/local/etc/h2o/h2o.conf

サンプル

ここのサンプルを実行してみます

library("h2o")
localH2O <- h2o.init(ip = "localhost", port = 54321, startH2O = TRUE, nthreads=-1)
cfData<-h2o.importFile(localH2O,path="https://raw.githubusercontent.com/ozt-ca/tjo.hatenablog.samples/master/r_samples/public_lib/jp/conflict_sample.txt")

ここでエラー発生

Error: is.character(key) && length(key) == 1L && !is.na(key) is not TRUE

どうやら、h2oの仕様が変わったようです。こちらを参考に修正します

cfData<-h2o.importFile(path="https://raw.githubusercontent.com/ozt-ca/tjo.hatenablog.samples/master/r_samples/public_lib/jp/conflict_sample.txt")
res.err.dl<-rep(0,100)
numlist<-sample(3000,100,replace=F)
for(i in 1:100){
 cf.train <- cfData[-numlist[i],]
 cf.test <- cfData[numlist[i],]
 res.dl <- h2o.deeplearning(x = 1:7, y = 8, data = cf.train, activation = "Tanh",hidden=rep(20,2))
 pred.dl <- h2o.predict(object=res.dl,newdata=cf.test[,-8])

 pred.dl.df <- as.data.frame(pred.dl)
 test.dl.df <- as.data.frame(cf.test)

 res.err.dl[i] <- ifelse(as.character(pred.dl.df[1,1])==as.character(test.dl.df[1,8]),0,1)
 }

またまたエラー

Error in h2o.deeplearning(x = 1:7, y = 8, data = cf.train, activation = "Tanh",  : 
  unused argument (data = cf.train)

仕様をみると、また変わっていました。以下のように修正します

 res.dl <- h2o.deeplearning(x = 1:7, y = 8, training_frame = cf.train, activation = "Tanh",hidden=rep(20,2))

続けます

sum(res.err.dl)

これでうまく実行できました

終了

sudo kill -TERM `cat /usr/local/etc/h2o/pid-file`

仕様がよく変わるので、メジャーバージョンアップ時は要注意です

Rでword2vec

こちらを参考にRでWord2Vecを実行してみたが、ちょっとハマったのでメモ

パッケージインストール

必要なパッケージをインストールします

install.packages("devtools")
library(devtools)
install.packages("tsne")
install.packages("magrittr")
install.packages("stringi")
library(tsne)
library(magrittr)
library(stringi)
devtools::install_github("bmschmidt/wordVectors")

データ作成

青空文庫から夏目漱石の三四郎をテストデータとします

$ wget http://www.aozora.gr.jp/cards/000148/files/794_ruby_4237.zip
$ unzip 794_ruby_4237.zip
$ nkf -w  --overwrite sanshiro.txt
$ mecab -Owakati sanshiro.txt -o data.txt

UTF8へ文字コードを変換しておきます。ちなみにmecabはUTF8のものをインストールしておいてください

R実行

Rから実行します

library(devtools)
library(wordVectors)
library(magrittr)
library(tsne)
library(magrittr)
wordVectors::train_word2vec(
  train_file = "data.txt", output_file = "model.txt",
  vectors = 200, window = 10,
  threads = 3
)

threadsはCPU数−1あたりで設定します
これを実行すると

 type.convert(data[[i]], as.is = as.is[i], dec = dec, numerals = numerals,  でエラー: 
   '(;;{ֺ3:q9<9a><99>
8(c<91>:' に不正なマルチバイト文字があります 追加情報: 警告メッセージ: 1: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 1 appears to contain embedded nulls 2: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 2 appears to contain embedded nulls 3: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 3 appears to contain embedded nulls 4: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 4 appears to contain embedded nulls 5: utils::read.table(filename, header = F, skip = 1, colClasses = c("character", で: line 5 appears to contain embedded nulls 6: utils::read.table(filename, header = F, skip = 1, nrows = 1, で: line 1 appears to contain embedded nulls

このようなエラーが出ます
この場合には気にせずRで

word2vec_model <- read.vectors("model.txt",binary=TRUE)

これで読み込み直してやります。

確認

> nearest_to(word2vec_model,word2vec_model[["三四郎"]])
      三四郎       与次郎       じっと           秋     ますます         勇気     見合わせ     おかしく           次 
3.330669e-16 4.131871e-01 4.873280e-01 4.886600e-01 4.895344e-01 4.948309e-01 5.033392e-01 5.220245e-01 5.278047e-01 
      腹の中 
5.329964e-01 
> nearest_to(word2vec_model,word2vec_model[["東京"]])
        東京       生まれ     これから       ずっと         変る         おれ       いなか         うえ       いっそ 
5.551115e-16 3.663971e-01 3.754231e-01 3.864140e-01 4.024397e-01 4.056571e-01 4.078920e-01 4.080678e-01 4.103215e-01 
    文芸時評 
4.340431e-01 

ま、こんなもんです