Rでピボットテーブルのようなものをつくるためのパッケージpivoteaを作成した. 主な関数は,pivot()のみ. 詳細は以下を参考にして欲しい.
https://cran.r-project.org/web/packages/pivotea/index.html https://github.com/matutosi/pivotea/ tidyなデータフレームをもとにして,列(row,縦)・行(col,横)・値(value,セルの中身)・分割(split)にそれぞれ配置したい列を文字列指定するだけで簡単にピボットテーブルのようなものが作れる. tidyr::pivot_wider(), tidyr::pivot_longer()でもピボットはできるが,同一セルに複数の値が入るときの処理が面倒くさい. 複数の値がある場合は,pivot()では縦に別の行として並べるところが,工夫点である. 同じコマに重複する科目があるときの時間割を作成するのに便利である(というか,それを目的に関数を作成した). 以下のvignettesでは,このことが分かりにくいかもしれないと思ったので,時間割のデータを追加する予定.
vignettes: https://cran.r-project.org/web/packages/pivotea/vignettes/pivoteasy.html
テスト駆動開発というのは知っていたが,正直なところ面倒くさい感じがして,ちゃんと使っていなかった. ちょっとしたことだが,作ってみたいプログラムがあって,テスト駆動形で試してみた. 入力と出力が頭の中で整理されているのであれば(そうあるべきだが),テストを先に作っておいてプログラムを書くのはすごく楽だとわかった.
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]]))
準備:色々とインストール
# 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を使っているのか分からなくなりそう. まあ,そもそも使えれば良いので,そんなことはどっちでも良い.