July 22, 2020

R:Shiny serverのパッケージ設定

ubuntuでShiny serverを設定する際には、パッケージのインストールに気を付けなければならない。
/srv に置かれたプログラムを実行する際は、ローカルに置かれたパッケージ(例えば /home/{user}/R/x86_64-pc-linux-gnu-library/4.0)を参照することができない。
これは、以下の方法では解消できなかった (少なくとも自分の環境では)。

失敗試行1. chownコマンドを使って、上記のフォルダにshiny(ユーザー)がアクセスできるようにする
失敗試行2. /etc/shiny-server/shiny-server.conf にアクセスし、run_as をshinyではなく自分の名前に変更する

shinyが参照するライブラリの場所は /usr/lib/R/site-library または /usr/lib/R/library になる。ここはroot権限の場所になるため、以下のようにターミナルからRを経由して(RStudioは使わずに)パッケージをインストールする。

sudo su - -c "R -e \"install.packages('foo')\""


July 17, 2020

R:パッケージのアップデート

Rのパッケージをアップデートしたい場合は、Rのコンソールより

.libPaths()

でライブラリの場所を確認する。パッケージがの場所がおそらく複数表示される。
アップデートしたいパッケージが入っている場所を確認し、例えば1番最初の場所だったら

update.packages(.libPaths()[1])

とコマンドする。この操作によって、パッケージを簡単にまとめてアップデートできる。
パッケージごとにアップデートするかどうかを聞かれるのを防ぎたい場合は、以下のオプションを入れると良い。

update.packages(.libPaths()[1], ask = FALSE)

ちなみに、個別にパッケージをインストールする場合は、こちらのページが参考になる。

*****

また、今回Ubuntu18.04においてパッケージのアップデートを行ったところ、以下のようなエラーが出てインストールが止まった。

In install.packages(update[instlib == l, "Package"], l, contriburl = contriburl,  :   installation of package ‘plotly’ had non-zero exit status


この原因は、元のフォルダに古いパッケージが残っていることであった。
そこで、以下の手順で解消された。

1) パッケージが置かれている場所の権限を変える。
sudo usermod -a -G staff your_user_name
sudo chown -R your_user_name:staff /user/local/lib/R/site-library

2) 古いパッケージを消す

3) インストールし直す


July 10, 2020

R:異なるモード型の行列をまとめる

異なるモード型の行列があるとき (c1: character, c2: numeric)

c1 <- matrix(c("a","b","c"), nrow=3, ncol=1)
c2 <- matrix(c(1:3), nrow=3, ncol=1)

cbindで結合すると、数字のモード型が文字に変換されてしまう。

mat <- cbind(c1,c2)
mode(mat[2,2])
[1] "character"

この問題は、データフレームに収めることで解決する。

df <- data.frame(c1,c2)
mode(df[2,2])
[1] "numeric"