🍭.Last.valueの話: 保存して欲しければまずは結果を見せな
Rでパイプ処理をしていると、「あ、今の結果をオブジェクトに保存しとけば良かった...。もう一回実行するのメンドクセ」、ということがしばしばある。
そんな時は直前の処理をやり直す必要はなくて、.Last.value
を使って対処することもできる。???。以下の例を見てもらうのがわかりやすいと思う。
例1
library(dplyr) # 種も仕掛けもございません is.object(x) # Error: object 'x' not found # なんらかの処理をする iris %>% dplyr::select(Sepal.Length, Species) %>% dplyr::filter(Species == "setosa") %>% dplyr::sample_n(3)
## Sepal.Length Species
## 37 5.5 setosa
## 42 4.5 setosa
## 9 4.4 setosa
# 保存してないことに気がつく .Last.value -> x # 救済された気持ちになる x
## Sepal.Length Species
## 37 5.5 setosa
## 42 4.5 setosa
## 9 4.4 setosa
例2
library(ggplot2) # ただプロットする mtcars %>% ggplot(aes(mpg, disp)) + geom_point() # 今の図にレイヤーを追加したくなった .Last.value + ggtitle("なんちゃら") # 結果は省略。タイトルを追加した図が描画される
種明しではないし、多分Rの基礎なのだろうけど( 2016-01-12コメントより追記: 「R言語逆引きハンドブック」には掲載されているそうですと思ったけど手持ちの「R言語上級ハンドブック」にも「Rプログラミングマニュアル―Rバージョン3対応 (新・数理 工学ライブラリ―情報工学)」にも書かれていなかった)、.Last.value
は最後に評価された表現式の値を一時的に保存している。なので例のように、コードを実行した直後(次の関数なりを実行するまで)であればオブジェクトとして保存することができるようになっている。
df_iris <- iris identical(df_iris, .Last.value)
## [1] TRUE
# 次の評価式が与えられると.Last.valueが更新される dim(df_iris)
## [1] 150 5
identical(df_iris, .Last.value)
## [1] FALSE
オブジェクトとして保存して欲しい?まずは結果を見てからだ、という気構えを持った方には便利かもしれない。
Enjoy!