RのNSE(Non-Standard Evaluation)というのがあって,便利な面とそうでない面がある. 本来なら,列名を指定するのに,“displ"のように指定すべきところを,ダブルクオーテーションなしでdisplとできるので,普段は便利だ.
library(tidyverse)
mpg %>%
dplyr::select(displ, year, cyl) ただし,パッケージ開発をするときにこの使い方をしていると,devtools::check()でWarningsとかNotesの対象になる. 新たな列名として使いたいときには,以下のようにする必要がある.変数に入れた文字列を使う時,既存の列の指定では.data[col_nameとして,新たな列のときは{{col_name}}({{“year_displ”}}はエラー)とする.
col_1 <- "year"
col_2 <- "displ"
new_col <- "year_displ"
# `:=`を通常の関数みたいに使用
mpg %>%
dplyr::transmute(`:=`({{new_col}}, stringr::str_c(.data[[col_1]], "_", .data[[col_2]])))
# 以下でも同じ
mpg %>%
dplyr::transmute({{new_col}} := stringr::str_c(.data[[col_1]], "_", .data[[col_2]]))
「詳説 正規表現」を読み始めた. まだ1章しか読んでないが,結構勘違いしていたことや知らなかったことが多い.
準備:色々とインストール
# Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Chorome driver
brew install chromedriver
# java
brew tap AdoptOpenJDK/openjdk
brew install --cask adoptopenjdk12
# check java installation
java -version
# download selenium
curl -OL https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar
mv selenium-server-standalone-3.141.59.jar /Applications/ seleniumの実行と
# run selenium
java -jar /Applications/selenium-server-standalone-3.141.59.jar
# ちょっとまっていると色々と表示される
# check process id
ps -A | grep 'java'
# 12708 ttys000 0:00.20 /usr/bin/java -jar /Applications/selenium-server-standalone-3.141.59.jar
# 12802 ttys000 0:00.00 grep java
# stop selenium
# 数字は1行目の左端に表示されるprocess idを入力
kill 12708
RからSeleniumを操作しようとだいぶ前に色々とやっていたが,RSeleniumが動かず断念した. 一応,Pythonでやりたいことはしたが,それでもやはりRが慣れていて便利なので,再挑戦した. 色々と試した結果,Seleniumのバージョンが4.0以上の場合は,RSeleniumが動かないことがわかった. バージョン2や3だとうまく動いた.
Pythonで書いたコードをRに書き換えた. Pythonではdatarを使っていたので,Rへの移植はそれほど難しくなかった.
JavaScriptでのウェブページ操作で,ページ移動のたびにlocalStorageやsessionStorageから関数群を引き出すというトリッキーな使い方をしていた. これはこれで良いが,結局手作業が必要なのが不便だ.
そこでSeleniumを導入して自動化を試みたものの,RSeleniumがどうもうまくいかない. Pythonならつながるので,Selenium自体やChromeDriverはちゃんと動いているようだ. 仕方ないので,Pythonで操作しはじめたが,Rのtidyverseの便利さには敵わない. と思っていたら,datarというPythonのライブラリを見つけた. できる限りtidyverseとほぼ同じようにやってしまおうというライブラリのようだ. 試しに使ってみたら,ほとんどRの書き方でできる. これは便利だ. datarに慣れるとPythonを使っているのか,Rを使っているのか分からなくなりそう. まあ,そもそも使えれば良いので,そんなことはどっちでも良い.
正規のHTML内に書かれた操作ではなく,デベロッパーツールのConsoleにJavaScriptを打ち込んでウェブページを色々と操作しようとしている. ページが移動すると,関数がクリアされるのが難点だ. sessionStorageを使って,関数やその他のデータを保存しておけば,なんとかなりそうだ. ただし,すごくトリッキーな使い方で,本来の使い方ではなさそう.
プログラムを書いていると文章を構造的に書くのに役立つと思う. 関数が1つの段落だとすると,関数のトピックセンテンスは返り値である. 何を出力したいかが明確でないと,関数は書けない.
ある関数から次の関数につなぐのは,引数や返り値である. これによってプログラムがつながっていく. 文章もキーワードなどによってつながっていく.
JavaScriptを勉強していると,普段使うwebツール上でマウスを駆使してクリックしているのがアホらしくなってきた. 一度だけの作業ならまだしも,同じような作業の繰り返しを定期的にしなければならないことがある. チェックボックスを探してそれをクリックするなどだ. 手作業で同じことをするのは面倒だし,間違いのもとである. JavaScriptで,使いそうなスクリプトを組んでみた. たぶん,それなりに使えそうな感じ.
手を抜くための苦労はいとわない.
植生調査アプリの基本機能のスクリプトは完成にかなり近づいた. ただ,コードを書きなぐってきたので,コードが汚すぎる. JavaScriptのコーディングスタイルに合っていないのは仕方ないとして, たぶん,不要な関数があったり,関数の引数が統一されていなかったりするあたりは整理が必要だ. どれが不要な関数かどうかはよく確認しないといけない. 一応,関数の関係性を確認するコードをRで書いたので,それを使って不要な関数を洗い出そうとするが,うまくいくかどうか. 関数の説明をちゃんと書いていないのも問題だ. このあたりは,徐々に整理する予定.
HTMLのtableはデータの整理には便利だが,項目が多くなると1行がどんどんと横に長くなってしまう. パソコンであれば良いが,スマホやタブレットではちょっと使いづらい. そこでレイアウトをレスポンシブ(画面サイズに合わせた表示)にする必要がある. そのあたりの変更を自動でしても良いが,植生調査アプリでは使用者がボタンを押して切り返す仕組みにした. ボタンを押すと,JavaScriptでスタイルを書き換えて,表示を途中で折り返すようにした. だいぶできてきた.
アプリ(CSS/JavaScript別ファイルバージョン) https://matutosi.github.io/biodiv/biodiv.html アプリ(1ファイルバージョン) https://matutosi.github.io/biodiv/biss.html 使用例 https://matutosi.github.io/biodiv/exam01.html