さわりのさわりなので、詳しくは公式を参照してね。
pins::pin
関数を使うと、Web上のリソースをキャッシュできる。
デフォルトではローカルにキャッシュする。
使い方は簡単で、関数に与えるURLをpins::pin
関数でラッピングしておくだけ。
url_penguins <- file.path(
"https://raw.githubusercontent.com",
"allisonhorst/palmerpenguins",
"master/inst/extdata/penguins.csv"
)
str(data.table::fread(pins::pin(url_penguins)))
#> Classes 'data.table' and 'data.frame': 344 obs. of 8 variables:
#> $ species : chr "Adelie" "Adelie" "Adelie" "Adelie" ...
#> $ island : chr "Torgersen" "Torgersen" "Torgersen" "Torgersen" ...
#> $ bill_length_mm : num 39.1 39.5 40.3 NA 36.7 39.3 38.9 39.2 34.1 42 ...
#> $ bill_depth_mm : num 18.7 17.4 18 NA 19.3 20.6 17.8 19.6 18.1 20.2 ...
#> $ flipper_length_mm: int 181 186 195 NA 193 190 181 195 193 190 ...
#> $ body_mass_g : int 3750 3800 3250 NA 3450 3650 3625 4675 3475 4250 ...
#> $ sex : chr "male" "female" "female" NA ...
#> $ year : int 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
#> - attr(*, ".internal.selfref")=<externalptr>
pins::pin
関数はローカル上のキャッシュへのパスを返す。
print(pins::pin(url_penguins))
#> [1] "/home/rstudio/.cache/pins/local/penguins/penguins.csv"
2回目以降に同じURLに対してpins::pin
関数を実行すると、
- キャッシュがあるか
- オンラインか
- キャッシュが最新か
を確認して、適宜キャッシュを更新してくれる。 キャッシュを使える場合はダウンロードしない分高速。 オフラインでも作業を継続できるのも便利ですね。
また、リモートに「も」キャッシュしておけます。 これにより、
- キャッシュの共有
- ソース消滅対策
ができます。 公式なキャッシュ先としては以下に対応。
- Azure
- DigitalOcean
- GitHub
- Google Cloud
- Kaggle
- RStudio Connect
- S3
GitHubの場合は
- キャッシュ保存用のレポジトリを作成
- 分析用のレポジトリとは分けておくといい。
- どうせ
pins::pin
関数でキャッシュする git
の差分の重さに悩まずに済む
- どうせ
- 分析用のレポジトリとは分けておくといい。
- Personal Access Tokenを発行して、Rに登録
- 登録は
Sys.setenv(GITHUB_PAT="<PAT>")
が簡単
- 登録は
- 以下のようにしてキャッシュする
- この場合も
pins::pin
関数はローカルキャッシュのパスを返すことに注目
- この場合も
pins::board_register("github", repo = "atusy/pins-cache-example")
url_penguins <- file.path(
"https://raw.githubusercontent.com",
"allisonhorst/palmerpenguins",
"master/inst/extdata/penguins.csv"
)
print(pins::pin(url_penguins, board="github"))
#> [1] "/home/rstudio/.cache/pins/github/penguins/penguins.csv"
GitHubではここにキャッシュされてます。
https://github.com/atusy/pins-cache-example/tree/master/penguins
Enjoy!!