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>