CRANからの返事があり,細かな修正点が3つあった.修正して,再投稿した.
DESCRIPTIONファイルのdescriptionフィールドには,ウエブサイトをhttp://...のように入れること.
Please provide a link to the used webservices to the description field of your DESCRIPTION file in the form http:... or https:... with angle brackets for auto-linking and no space after ‘http:’ and ‘https:’.
関数の戻り値をちゃんと書き,戻り値がない場合は,「No return value, called for side effects」のようにすること.
Please add \value to .Rd files regarding exported methods and explain the functions results in the documentation. Please write about the structure of the output (class) and also what the output means.
clidatajpというパッケージを作った. CRANからの返事はまだ無い. どこで処理が止まっているのかは,とんと見当がつかない.
https://github.com/matutosi/clidatajp/blob/main/READMEjp.md
ウソです.普通に時間がかかっているだけだと思います.
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で,使いそうなスクリプトを組んでみた. たぶん,それなりに使えそうな感じ.
手を抜くための苦労はいとわない.