LoginSignup
31
29

R言語はこうやってあなたのPCのストレージを食い尽くす(対策あり)

Posted at

はじめに

こんにちは、事業会社で働いているデータサイエンティストです。

普段業務と自分の計量政治学の研究で利用している技術は

  • R言語:50%
  • Stan言語:30%
  • SQL(BigQuery):10%
  • git:8%
  • docker:2%

です。

Pythonは文法と主要パッケージの利用方法をある程度把握しています。

Julia言語は文法を少しだけ把握しています。

計量政治学とは何なのかというと、要するに政治学の世界で開発された、データの中に隠されたインサイトを抽出する学問です。ビジネス示唆の抽出とレコメンドシステム構築といったところへの転用もしやすく、大変ありがたい学問です。

さて、本題に入ります。

Rユーザーの皆さん、パソコンのストレージがどんどん圧迫されていませんか?

大好きなゲームや大切な写真、ビデオなどのような大きいファイルを全部消しても、状況が改善されないことを経験したことありますか?

これはRの影響かもしれませんので、ぜひ最後まで読んでください!解決策を教えます。

なお、別言語にも似たような現象があるかもしれないので、Rユーザー以外でもぜひ読んでください。

現象と対策

下のスクショは、この日本の論考を執筆した際に利用したRプロジェクトのフォルダです:

Screen Shot 2024-03-07 at 19.41.11.png

ファイルサイズでソートしています。

まあ、こんなものですね。

でも、shift + command + . を押すと(Macの場合)

Screen Shot 2024-03-07 at 19.44.24.png

隠しファイルが出てきました。

.RDataが巨大なのは、テキストアズデータ(自然言語処理)の分析だから仕方なく許すとしても、.RDataTmp1と.RDataTmpのサイズは流石に無視できません。

.RDataTmpの用途は、こちらのドキュメントの内容から判断すると

Rが落ちた時に生成されるかもしれないファイルのようです。

ちなみに実験した結果、Rのプロジェクト終了時にも.RDataTmpは一時的に生成されますが、すぐに消えて.RDataになります。

要するに、普段何もしていない状態で.RDataTmpを見かけると、過去のRが吐き出した廃棄物と理解しても良いのではと思います。.RDataTmpを消しても経験上問題は起きないはずですが、ご自身の責任において削除判断をしてください。

ちなみに、詳細は言えませんが、会社のとある分析用Rプロジェクトに.RDataTmp38まであって、全部消したら数百GBのストレージを解放できました、一瞬で。

他言語との動作比較

.RDataTmpと.RData関連のRの仕様を理解するために、他言語との比較をしたいと思います。

まず、Pythonを確認しましょう。

見やすさのためターミナルから操作します。

XXX ~ % python

WARNING: Python 2.7 is not recommended. 
This version is included in macOS for compatibility with legacy software. 
Future versions of macOS will not include Python 2.7. 
Instead, it is recommended that you transition to using 'python3' from within Terminal.

Python 2.7.18 (default, Oct  2 2021, 04:20:38) 
[GCC Apple LLVM 13.0.0 (clang-1300.0.29.1) [+internal-os, ptrauth-isa=deploymen on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
XXX ~ % 

exit関数を実行したら普通に離脱できました。

Juliaの状況も見ましょう。

XXX ~ % julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.7.3 (2022-05-06)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> exit()
XXX ~ % 

Juliaもexit関数を実行したらすぐ離脱します。

ではRはどうでしょう?

XXX ~ % R

R version 4.2.0 (2022-04-22) -- "Vigorous Calisthenics"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin20 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

[Previously saved workspace restored]

> q()
Save workspace image? [y/n/c]: n
XXX ~ % 

Rはq関数で離脱を実行しますが、

ワークイメージを保存しますかという質問に答える必要があります。

なのでRはPythonとJuliaと違って、作業結果を保存する機能が重視されるが、結果として時によってPCのストレージを食い尽くしてしまう結果につながります。

言語仕様の背後にある思想

これはドキュメントもRのsubversion側のレポジトリも確認していないですが、個人的には、R言語のこの実行結果を保存したがる仕様は、統計ソフトとして誕生したことと関係あるのではないかと思います。

統計ソフトとして誕生したRは、Excelのように、とにかく分析者が実行した結果を正しく保存することが強調されるが、バイナリファイル形式で統計モデルを保存して次回また読み込む工程は非エンジニアにとって難易度が高く、Rがよしなにやってくれる仕様になっているのではないかと推察します。

結果保存自体は別に悪いことではなく、かつ.RDataTmpを消せば問題解決なので、言語仕様を変更する必要はないですが、わかりやすいところでRのこの挙動を明記した方が良いのではと思います。

結論

Rは統計ソフトとして誕生したと話しましたが、現代ではもう統計ソフトではなく、Javascript、PHP、C++、Julia、Pythonのような普通のプログラミング言語です。APIも

フロントエンドも

実装できます。

また今後別の記事で説明しますが、分散処理と非同期処理も簡単に設定できます。

ぜひRの仕様を理解した上で、研究と業務でどんどんRを活用してください!

31
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
29