niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) View関数に関して(3回目)

色々なパターンで確認してみる。

以前、RStudioでView()での表示のさせ方が変わった件について書きました。

niszet.hatenablog.com

しかし、改めて読み直すと内容が薄いような…。
と、いうことで。

あらためてView()の関数によって各オブジェクトがどのように表示されるのか?また、表示された状態から何が出来るのか?を見ていこうと思います。
ここに至るまでの話は下記の記事を参照ください。

niszet.hatenablog.com

niszet.hatenablog.com

niszet.hatenablog.com

残るはlistの表示の件。

たとえばこんなデータを表示してみる。

View(list(a=1:4, b=letters[1:3], c=seq(0.1, 0.5, by=0.1)), "list")

f:id:niszet:20180207225442p:plain

これは1回目のViewの話で書いたように、タブに"list"という名前がついています。

ちょっと属性つけてみましょう。

a <- list(a=1:4, b=letters[1:3], c=seq(0.1, 0.5, by=0.1))
attr(a$a, "xxx")<- "hoge"
attr(a$b, "yyy")<- "foo"
View(a, "list_attr")

Show Attributeにチェックを入れると、今つけた属性が見れますね1

f:id:niszet:20180207230155p:plain

バグなのか仕様なのか、このボタンの左のアイコンを押すとこのPaneが分離できますが、元に戻すとShow Attributeのチェックが外れてしまいます。デフォルト状態に戻るということですかね。

さて、まぁ大体見ればわかるのですが、(▷)のアイコンを押すと展開されます。(▽)になっているのは展開済み。

ここではトップのlist_attrが長さ3のlistであること、その要素にa,b,cがあり、aはintegerとして4要素、1,2,3,4が含まれ、その属性は長さ1のlistでその名前はxxx、値はcharacterhogeであることが確認できるわけです。凄い!便利!

environment Paneの記事で書いた通り、この中身はそちらでもstr()で見た結果と同じものが見れます。当たり前ですが同じ構造であることが確認できますね。

f:id:niszet:20180207230214p:plain

さて、View()で見ているlist_attrの方、画像の右下にある[⇐]のアイコンを押すと、

list_attr[["c"]]

のようにコンソールに現れます。この、選択した要素を抜き出すための関数をRStudioが作ってくれる、という点がポイントです。もうstr()の結果とにらめっこして頑張って追う必要はもうないのです。

やりました…!

が、ちょっと待ってください。ここで値を取り出そうとすると、

list_attr[["c"]]
#> Error: object 'list_attr' not found

と、エラーとなってしまいます。これはエラーの内容の通り、list_attrなんてオブジェクトはいないから、です。Environment Paneを見ても確かにいませんね。これはView()で開くときに、タブに名前を付けたから起きています。

ということで、list形式のデータを見るときに、Viewで名前を付けるのは(現時点では)やめた方が良さそうです。 これは要望出せば改善してもらえる気がする...

もう一点。このViewで表示される内容、この🔍のアイコンがついた状態で表示されている場合に、 再表示(aの内容を書き換えてから、タブlist_attrがある状態でView(a, "list_attr")する)しても表示が更新されないようです。 タブを一旦閉じてから再度Viewで開いてください。この点も気づかないとハマるので要注意。

さて、あらためてaをそのままView()で表示させて、要素aの属性のアイコン[⇐]を選択して…

View(a)
attributes(a[["a"]])
#> $xxx
#> [1] "hoge"

出ました!

というわけで、list形式のデータ(S3でも、environmentでも可です)の構造を見やすく、下位のデータの選択・取り出しが容易になるView関数についての紹介、とりあえずこれで一旦区切りです。

これでrepurrrsiveパッケージに収めらえているような複雑なデータ形式や、ggplot2ライブラリで生成されるオブジェクトが一体どのような構造で、何をしたら何が変わるのか?を追いかけやすくなるのでは?と思います。

RStudio IDE、これ単体だけでもデータがかなり見れるようになっていてとても良いですね!

Enjoy!!

このお話には続きがあります。よろしければどうぞ。

niszet.hatenablog.com


  1. こういうときに定番の列名とかあった方が良いですね?考えておきます…。