ちょっと前にでかめの機能追加がマージされたので、それの解説をします。と言っても、まだ機能が全部出揃ってるわけではないし(関連する主な pull request は 3 つあって、まだ 1 つ目がマージされただけ)、正式なリリースもいつになるか分からないので、プレビュー版みたいなものだと思って読んでください。
続きを読むメモ:前処理大全 7-5「不等式条件での結合」は dplyr なら join_by() が使えるよ
少し前に改訂新版が出ましたね、前処理大全。
7-5「不等式条件での結合」は、旧版から変わっていないトピックですが、実は dplyr はこの数年の間に進化しています。 当時は非等価結合ができなかったんですが、バージョン1.1.0(2023年1月リリース)からできるようになっています。
続きを読むALTREP 徹底入門
R には、バージョン 3.5(2018年リリース)で導入された ALTREP という仕組みがあります。ALTREP は alternative representation の略で、たぶん「通常とは異なるメモリ上の表現」みたいな意味です。要は「普通のベクトルのように扱えるけど中身は実は別物」みたいなものをつくれますよ、というものです。
これが、導入されてもう5年も経つんですが、いまだに公式ドキュメント(Writing R Extension、R Internals)には説明がありません。
R のソースコードがあるレポジトリの、ALTREP
というブランチにひっそり入っている以下のドキュメントを読むか、既存のパッケージのコードを読むぐらいしか道がないです。
自分の頭を整理する意味も込めて、わかったことをこのブログ記事にまとめます。
RustからRのC APIを使う時、エラーをちゃんとハンドリングしたい
RのC APIを使う時、当然ですが任意の操作は失敗する可能性があります。
このために、RのコードでいうtryCatch()
にあたるものがいくつか提供されています。
https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Condition-handling-and-cleanup-code
この中で、もっともオーバーヘッドが少ないのが R_UnwindProtect()
であり、cpp11 でも extendr でも使われているものです。
しかし、これを使うにはけっこう難しい話を理解する必要があります。
RでC APIを使う時、SEXPをGCから守る3つの方法
extendrの実装おかしくない?、というのを最近調べていて、理解が深まったのでメモっておきます。
続きを読むメモ:2023年4月時点で rp-hal と rtic を使おうとして遭遇した問題
前回、大変そう、みたいなことを書いたけど、実際大変だったので遭遇した問題をメモっておく。 たぶん1年後くらいに見るとだいたい解決されてそうな気はする。
続きを読む