niszetの日記

細かい情報を載せていくブログ

(R) zeallotパッケージがCRANに公開されていた(小追記あり)

ちょっとだけ書きます。

タイトルの通り、CRANにこのパッケージが登録されていました。まだ1週間たってませんね。

CRAN - Package zeallot

この情報は今rstudio::conf 2018が開催されていますが、そのツイートからでした。

このリンク先、githubリポジトリからさらにGoogleスライドに飛ぶことが出来ます。

github.com

なお、github版はこちらにになりますね。 github.com

このtopのページやvignettesに良い例がありますのでご参考に。

しかし…このパッケージ、どこかで見たことが…?と思って調べると偉大なるあの方のブログに行きつきますね。

notchained.hatenablog.com

notchained.hatenablog.com

何が出来るのか

yutannihilationさんの最初の記事の方に書かれていますが、Rでは代入先に複数の変数を指定することが出来ません。

どういうこと?

c(a,b)<-c(1,2)
#> Error in c(a, b) <- c(1, 2) : could not find function "c<-"

こういうことですね。

zeallotを使えば、出来ます。

library(zeallot)
c(x, y) %<-% c(1, 2) 
x
#> [1] 1
y
#> [1] 2

なお、左辺のc()はとることが出来ません。Rの文法的に仕方がないのですが…。スライド中ではLeft-hand side of darknessと表現されていますね。闇…。

このパッケージ、含まれている関数は3つしかありません。

%<-%
%->%
destructure

です。先の2つは左辺に代入するのか右辺に代入するのかの違いですね。

ここからが新しい情報

スライド中ではunpackingと表現されていますが、ベクトルの要素やlistの要素を取り出す形で使うことが出来ます。

まぁ、そのままやっても面白くないので、tibbleの要素にlistを持つ、あるいはlistの要素のtibbleを持つような複雑なデータ構造を持つデータセットが多数含まれているrepurrrsiveパッケージに使ってみます。

repurrrsive::got_charsはlistの要素にlist、その要素に文字列などを持っています。例えば下記のように書くと、listの中にある要素の1つめのlistを、その第一要素をaに、残りをrestに代入し、他を捨てることになります。

c(c(a,...rest) , ...) %<-% repurrrsive::got_chars
a
#> [1] "https://www.anapioficeandfire.com/api/characters/1022"

なお、.で1つの要素、...は残りの全要素を表すがそれぞれデータは代入せずに捨てられます、...hogeは変数hogeに代入するという意味になります(任意の変数名でよい)

スライドの例では、quosureには対応していないので、destructure.quosureを作りましょうと書かれていますね。

あまり良い例が思い浮かびませんでしたが、例として環境を与えてみます

x <- new.env()
x
#> <environment: 0x0000000021775bc0>
c(y,o=NULL) %<-% x
#> Error: invalid `%<-%` right-hand side, incorrect number of values
destructure.environment <- function(x){list(get_env(x))}
c(y,o=NULL) %<-% x
y
#> <environment: 0x0000000021775bc0>

こんな感じ。destructure.environmentを新たに定義することで、エラーを回避しています。また、受け取り側にダミーの変数oを置いています(%<-%なので複数あった方が良いかなと思いまして)
初期値としてNULLを与えています。これを設定しないと、oに値が入らないのでエラーになってしまいます。

c(y,o) %<-% x
#> Error: node stack overflow

R落ちた…。この悪例を試すのはやめた方が良いです。

pipeについて

これだけはスライドにしか情報がなかったのですが、pipe、%>%と組み合わせる場合、全体を()で囲う必要があるそうです。ただし、%->%であればそのまま使えるそうなので、そっちを使いますかね…。

ということで、簡単ですがzeallotパッケージの紹介でした。

まだできて間もないパッケージですが、かなり便利に使える気がしますね。問題もありそうですが(上の例の様に受け取る側の変数が多すぎるときとか)

追記

ということで、見逃していました… 初版は1年前ですね。結構刻むなぁ…

Enjoy!!

DPのケーブルを接続したままUbuntuを起動す・・・出来ない。

原因不明です…

先日購入のこのモニター、 niszet.hatenablog.com

DPかHDMI2本差しじゃないと4kの恩恵1を受けられないので、DP一択だったのですがどうもDPケーブルをPC本体に刺したまま起動しようとするとコケてしまいます。 実際のところは何が起きているのかわかりません。画面に何も表示されないので。HDMIで接続すると表示されるので、DPが悪い…のか?という感じなのですが。

しかし、HDMIでも相当速いイメージだったんですが、DPってすごいですね。本体に冷却スプレーとかかけたりケーブルを伸長してみたりしてみたいですね2。 とりあえず情報収集中です。何かわかれば記録を残します。

今日のところはここまで。


  1. 韻を踏んでますねぇ…!

  2. 冗談ですよ?えぇ。

ubuntuが重すぎて…LXDEにしたら解決した話

PCの性能が足りない…?いや、そんなばかな…。

ラズパイ君のときもそうでしたが、ubuntuは初期設定のまま使おうとすると、ウィンドウの選択や移動などの操作でものすっごくもっさりもっさりします。もっさりの原因はデスクトップ環境にUnity使っているかららしい。

で、先日購入のPCでももっさり…

niszet.hatenablog.com

いやー、このマウスのカーソル、重力に心引かれすぎでしょ…ってくらいに動かせない感じ。うーむ、しんどい。

ラズパイの時はマシンスペックのせいだと思ったけど、さすがにこのPCで重いのはおかしいでしょう…!ってことで、探したところそのものずばりな記事を下記で見つけました。

kuzunito.hatenablog.com

GNOME

とりあえずこちらを入れてみました。多少軽くなったものの、やっぱりもっさりする…というかウィンドウ切り替えが全然イケてない…。

よってこちらを使うのは諦めました。

LXDE

もう一つの選択肢、LXDEですがこちらはかなり軽くサクサクです。

良いです。こちらにしましょう。

ということで、ひとまず事なきを得ました。

しかし、まだまだ解決していない問題が多々あるので順次解決させて、記録を残していきます。

とりあえず今日はここまで。

親向けにiPadの設定をしていて思ったこと

日記です。

先日iPadを購入したのですが、「これ指紋認証とかアドレスとかパスワードとか本人いないと設定できないな…」ということで放置していましたが、実家で設定したので簡単にメモ。

購入のモチベーションですが、もともとPC等使えない人なんですが、携帯とかはまぁなんとかなった。Androidだと機種ごとにUI違うと面倒くさいのでやはりiPadかなーという流れ。既に第一次世代iPadは貸していてやや使えてはいたので、それもあって。

購入とか登録とかの使えるようになるまでの設定などについて。

基本的に全部私が設定。このあたりは全く触ったことがないって人には難しいですよね…と改めて思うのです。
よく、「電気店とかで設定できるサービスがあるけど、値段高くない?」という話があがりますが、この修得コストとやりたいことのギャップを考えるとお金で解決できるならばそれで良いのでは…って思いますね。お金はお金で解決できることを解決させるために使うのです…

新規のiPadとして、前のアカウント等はなしとしてアカウントを作る形で作成。指紋は10回くらい触ってもらったかなぁ…。自分でやったことがないので指紋認証の年齢依存とかは分からず。
一応、指紋認証はちゃんと働いている気がしますね。何気にコレすごい機能だわ。

とりあえずYouTubeが気楽に見れることが大事だったので、アプリ落としたりWi-Fi設定したり。一応radikoも入れて。外で使わないから普通にラジオ聞けば良いのかもですが…。

Siriの設定

これはちょっとしくじったかもしれない。あまりSiriに認識してもらえないからである。ちょっと調べて、工夫が必要かもしれないな…。 音声入力は活舌があまり良くない人にはどうなんでしょう?今はテクノロジの進歩により問題ないのでしょうか。

YouTubeで履歴残すためにgoogleのアカウント作成

まぁこれはなくても良いのかもだけど、履歴があった方が良いかなと思ってgoogleアカウントを作成した。 このアカウントの追加にも電話での認証があるのでコレのためにも本人が隣にいないとできないのですよねぇ…。しかし、携帯電話があることを前提とした(まぁ電話着信でも受け取れるんだけど)仕組みって考えると、世の中変わったなぁ、と(いつ比だよ…)

文字サイズ

これ、高齢者向けには大事な点でして。サイズは目一杯大きくして文字は太字にしました。一応読めるっぽいけどもう少し全体的に大きく表示させたいなぁ…。
文字表示自体はまぁこれで設定できて良いのですが、アプリのボタンの表示サイズとかが小さくて辛かったりするので、うーむ。個別に設定できればそれでよいのですけど面倒くさいですよねぇ

重さ

何だかんだで結構軽いipadですが、それでも長時間持つのは重いらしく、上記のサイズの点との兼ね合いですが、画面サイズと重さから考えると、まぁこのサイズが丁度ってところですかねぇ…。

使ってもらった感じ

とりあえずSiri起動からのYoutubeは体験してもらったものの、「んー難しい」という感想をいただきました。そっかー…

難しいというよりは慣れないってことかな。

音声入力にすることで楽になるのかなと思ったのですが、思ったよりそうではないっぽい…。
ひとつは今までとは異なるやり方という点、あとはあまりうまくSiriが認識してくれなくて、その時にどうすればよいのかがわからないという点、かな。改善点としては。

前者は…まぁ慣れれば大丈夫でしょう。たとえば、「1個前の会話はSiriは覚えていない」というルールを覚えれば、「よくわかりませんでした」の回答には「〇〇ってことだよ」と返してさらに的外れな回答を得る…ということはなくなるのだと思うのです。

後者はSiriがちょいちょい気を利かせて文字を変えたりしてくるんですが、それが良くない時とか。 質問がうまく通らなかったときに、何を補足・訂正すればよいのか?もある程度知識と経験が必要だなと思った次第。

僕とかだと上手くいかなかったらある程度、無意識に条件を絞り込めるか間違っていればそれを正せるような情報を追加して言えるのですが、何が悪かったのかがわからない状態だと、何を訂正・補足すればよいのかがわからないのですねぇ。「こいつは〇〇を××の関連するモノと認識しているんだな…?」という感じですね。

この辺りはある程度経験かなぁって思いますが。しばらく様子見かな…

でもやっぱりテクノロジの進歩はすごい。

そもそも音声で入力できるってのも凄いし、googleから認証用の電話がかかってくるとかも冷静に考えてSFだし、すごい時代だなぁ…って思うのでした(何周遅れの感想だ…)

そして、こういったユーザの使い勝手が良い、というか「裏で動いているモノ(͡コト)の意識をさせなくてよい」1 というのは良いですね。面倒だったり・困難だったり・大変だったことが簡単に出来るようになるというのが技術としてのあるべき姿だなぁ、と改めて思ったのでした2

そんなわけでしばらくはトレーニングかなー…。この経験は何かに活きそうなのでもうちょっと綺麗にまとめたい(が、進捗を出してからにしよう)


  1. まぁ上の例のように、ある程度知らないと良い答えが得られないという点はあるが)

  2. MFTの展示を見て以来、そう思うようになりましたね…

(R) ubuntuにR入れる…

新しい子がやってきたので

早速、ubuntu入れました。win10がプレインストールされていたのですが…消しちゃったぜ…。

ubuntu自体はこちらから、 Ubuntu Desktop 日本語 Remixのダウンロード | Ubuntu Japanese Team

isoをdvdに焼いて、PC起動時にBIOS(UEFI)でdvdから起動するようにしてinstall、という流れ。

ただ、Ubuntu 16.04 LTS ではインストール時に「error parsing pcc subspaces from pcct ubuntu windows」というメッセージが表示されて先に進めることが出来ませんでした。
だもんでUbuntu 17.10を使用しています。

下記のやりとりを見ると、kernelの古いやつだと起こるのでは?と言われていますね。良く分かりませんが…

[ERROR ON BOOT] Error parsing PCC subspaces from PCCT / Newbie Corner / Arch Linux Forums

とりあえずあとは指示に従って入れれば良いのではと思います。

apt-get updateとか。

とりあえず更新できるものは初めに更新しておきます。
今見つけた(ので、実作業時は見てなかった)けど、下記のページがまとまっていて良いですねぇ。

qiita.com

R入れる。

こちらの記事をそのまま実行してうまくいきました。こういうやり方があるんですね。 qiita.com

RStudio入れる。

同様に、こちらの記事に従って。 qiita.com

あれ?日本語入力できない問題とかあるのですか…まだそういうの試してなかった。試さなくては…

tidyverseとか入れる

そのまま入れようとすると、xml2, curl, httr, openssl, rvsrtあたりが入らない…。rvest自体は依存パッケージ起因ですが。
結果としてlibxml2-dev、libssl-dev、libcurl4-openssl-devが必要でした。これらをapt-getで入れてからinstall.packages("rvest")で依存パッケージ含めてインストールされます。

keras入れる

ようやく本命。 tensorflow.rstudio.com

これも書いてある通りに行いますが、kerasの前にtensorflowを、tensorflowの前にpython, pip, vertualenv入れろと言われるのでそれぞれ従います。
また、gpu版を使うのでinstall_tensorflow(version="gpu")も実行します。

stan入れる

install.packages("rstan")で多分問題なく入ったのでは?と思うのですが、何かあれば下記を参照するのかな。

github.com

その他

vimとかnvimとかいろいろ入れるものはあるのですが、まぁそれは追々かな。

なんか思い切ってしまったのだが…

まぁ、買ってしまった以上はちゃんと使わないとね! とにかく手を動かしてみないとわからないことが多すぎるので、とにかく手数で勝負ですな…

Enjoy!!

(R) cli::demo_spinners("dots") が表示されないのはフォントの問題だったのでメモ

cliパッケージで遊ぼうと思ったらしょっぱな躓いたので…

cliパッケージの話って以前しましたっけ?

niszet.hatenablog.com

してましたね。

この、ターミナル上での解析をもっと見やすくしたいという感じ、良いと思ってます1。 で、とりあえずcliパッケージのトップにあったデモを動かしてみたんです。デモ。

cli::demo_spinners()

そうしたらなんかdotsといくつかが動かないんですよね。

# 1文字だけ表示する場合は、その文字の名前を入れてあげる。
cli::demo_spinners("dots")
# デモ表示できる文字は下記で調べられる。ここに含まれない文字は表示されないよ
cli:::list_spinners()
# 内部的にはget_spinnerで得られたframesをintervalの時間間隔で順次表示していくという形でアニメーションしている。正常に表示されたlineだとこんな感じ
cli:::get_spinner("line")
#> $name
#> [1] "line"

#> $interval
#> [1] 130

#> $frames
#> [1] "-"  "\\" "|"  "/" 
# dotsの構成要素を表示すると何も表示されないように見える。
cli:::get_spinner("dots")$frames

などと調べていたら、忍者さんから

2と。

# たしかにコピペすると見えるようになる
#> [1] "⠋" "⠙" "⠹" "⠸" "⠼" "⠴" "⠦" "⠧" 

そういえば、以前リガチャに関してでしたが記事がありましたね…。リガチャ関係ない?からいいかなと当時は思っていましたが、 notchained.hatenablog.com

ということで、ここで紹介されているIosevkaというフォントを入れてみます。
特に何も考えずにreleaseの一番上にあるzipをダウンロードして、

github.com

こちらの記事に従ってフォントのところに入れ、

フォントのインストール(Windows 10/8/7/Vista)

RStudioを再起動して、Global optionsのAppearanceでフォントを再設定したら…見れました!

ということで、windowsが悪いのではなく、windowsが悪いと思っていた私が悪かったのでした…。

フォントまで関係してくるとなかなか素人には厳しい世界な気がしますね…。
なお、私が今まで使用していたのはLucida Consoleでした。このフォント見やすくて気に入っているんですけどね…。

日々少しずつ成長です…。

Enjoy!!


  1. 「とりあえずplot」と同じノリですが。私は分析やさんじゃないので許して…

  2. 他の環境で動くなら中身が空ってことはないってことにパッと気づかない私。

(R) testhat 2.0.0 ではwith_mockが使えないのでmockeryパッケージを使えって書いてあった (メモ)

気づいたらバージョンが2.0.0になっていました。

そういえば、パンダ本1で知りましたが、R3.4.0からJITコンパイラによって高速化するようになったとのこと(パフォーマンスの章を参照)
ネット上で探してみると実際に速くなったという例が何件か報告されていて、まぁさすがにもうR3.3.xを使用している方もいないとは思いますが、まだの方はR3.4.3(最新版)に更新するだけでパフォーマンスの向上が得られますね2

masato-613.hatenablog.com

r-statistics-fan.hatenablog.com

代償か…

で、testthat2.0.0のNEWS読んでいたら

NEWS

with_mock使えないのでmockeryパッケージ使ってねとのこと。

github.com

10月時点で開発版があったんですね。

話題は違うのですが。cranになるまでに結構時間差ありますね。

notchained.hatenablog.com

しかし、Rでテストを書くうまい方法とかってあまり見たことがない気がするのです。
私自身がソフトウェア系ではないので、多分、テスト自体いまいちよくわかってないからというのもあるのですが…。

cranのパッケージを覗いて見てみるのが手っ取り早いのかな。やってみよう。

ということで、

Enjoy!!


  1. Rプログラミング本格入門―達人データサイエンティストへの道― www.kyoritsu-pub.co.jp

  2. まぁ、R3.3.xでもJITコンパイラオプションを有効にすればいいんですけど…