Rアドベントカレンダー、12/21の記事です。 Rmd関連のつもりでしたが、時間がないので、最近作ったimportasパッケージのネタに走ることにしました。
importasパッケージでは、Pythonにおけるimport numpy as npみたいなことが、Rでできるようになります。
Pythonではimportしたライブラリにドットを繋ぐ形で、関数の呼び出しを行います(例えばnp.mean)。同様に、importasパッケージではggplot2 %as% ggなどとパッケージ名を省略し、$演算子を用いて関数を呼び出します(例えばgg$ggplot)。
Rには関数の名前が衝突しないように、パッケージ::関数という記法を愛用する一派がいます。しかし、パッケージ名が長いと行が長くなりがち……。そんな問題をimportasパッケージで解決しましょう!
インストール
GitHubからインストールして下さい。 CRANには投稿済みですが、なかなかお返事が来ません。
remotes::install_github("atusy/importas")使ってみる
一つずつimportする
%as%演算子を使うと、パッケージ名の略称を定義できます。例えばggplot2パッケージをggと省略してみましょう。
library(importas)
ggplot2 %as% gg
gg$ggplot(mtcars) +
gg$aes(wt, mpg) +
gg$geom_point()
ggplot2パッケージの略称を定義しているだけで、読み込んでいるわけではないことに注意して下さい。例えば単にggplot関数を呼び出すとエラーになります。
ggplot## Error in eval(expr, envir, enclos): object 'ggplot' not found複数を一度にimportする
importas関数を用いると、複数のパッケージの略称を一度に定義できます。例えばdplyrパッケージをdp、tidyrパッケージをtdなどと略してみましょう。
importas(dp = dplyr, td = tidyr, ts = tidyselect)
# dplyrを読み込んだわけではないので、
# パイプ演算子を明示的に読み込む必要がある
`%>%` <- magrittr::`%>%`
iris %>%
head %>%
dp$select(-Species) %>%
td$pivot_longer(ts$everything())## # A tibble: 24 x 2
## name value
## <chr> <dbl>
## 1 Sepal.Length 5.1
## 2 Sepal.Width 3.5
## 3 Petal.Length 1.4
## 4 Petal.Width 0.2
## 5 Sepal.Length 4.9
## 6 Sepal.Width 3
## 7 Petal.Length 1.4
## 8 Petal.Width 0.2
## 9 Sepal.Length 4.7
## 10 Sepal.Width 3.2
## # … with 14 more rows実はexportされていない関数も使えちゃう
従って、::の代替というよりは:::の代替に近いところがあります。ちょっと注意が必要かも。
dp$mutate.tbl_df## function (.data, ...)
## {
## dots <- enquos(..., .named = TRUE)
## mutate_impl(.data, dots, caller_env())
## }
## <bytecode: 0x5562b3cbd6e8>
## <environment: namespace:dplyr>
Atusy's blog