niszetの日記

細かい情報を載せていくブログ

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

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

前回の続きになります。

niszet.hatenablog.com

引き続き、これを読んでいく形です。

support.rstudio.com

advanced topics

auto-refreshing

data.frame等であれば大体自動で更新されます(経験上)
が、listの場合は注意が必要かもです。私の環境ではタブに名前を付けた場合にはデータが更新されても表示が更新されませんでした。
listを表示する話自体はまた次回以降に。

なおこの時、変数は基本的にはグローバル環境になくてはいけないようですが、まぁ普通はそうだろうから気にしなくて良いかなと。

ラベル

これ結構便利な気がしますし、知らなかったのでちょっと追ってみます。

data.frameをViewで表示させたときにその変数名とは別にラベルをつけることができるとのこと。
具体的にはdata.frameの各列に対して"label"という名前で属性(attribute)を与えると、Viewで列名が表示される部分に追加でラベルで指定した文字列が表示されるという仕組みのようです。

リンク先のように、Hmiscというパッケージをインストールした上でlabel()<-を使用すると特定の列にlabelを追加することが出来ます。 実際にやってみます。

install.packages("Hmisc")
library(Hmisc)
x <- iris
label(x$Sepal.Length)<-"huga"
View(x, "labeled")

とすると、こんな感じで表示されます

f:id:niszet:20180204000434p:plain

が、これはstrで見てみると

str(x)
#> 'data.frame':    150 obs. of  5 variables:
#>  $ Sepal.Length:Classes 'labelled', 'numeric'  atomic [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
#>   .. ..- attr(*, "label")= chr "huga"
#>  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
#>  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
#>  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
#>  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

なので、直接attr関数で与えてあげても良いのです。つまりこう、

x <- iris
attr(x$Sepal.Width, "label")<-"foo"
View(x, "labeled2")

…でもいけるわけですね。結果はこんな感じになります。

f:id:niszet:20180204000504p:plain

また、data.frameにvariable.labels属性を与えても表示されるとのこと。やってみます。

x<-iris
attr(x, "variable.labels")<-c("foo","bar","hoge","fuga")
View(x, "labeled3")

結果はこうなります。

f:id:niszet:20180204000543p:plain

また、これは書いてなかったのですが、列のlabel属性の方がデータフレームのvariable.labelsよりも優先されるようです。どういうことかというと、

x<-iris
attr(x$Sepal.Width, "label")<-"foo"
attr(x, "variable.labels")<-c("foo","bar","hoge","fuga")
View(x, "labeled4")

で、表示する

f:id:niszet:20180204000615p:plain

と見てのとおりSepal.Width列に直接与えた方のラベルが有効になってますよね。属性を与える順序を逆にしてもこの結果は変わりませんでした。

また、5列目は与えていないのでラベルが表示されない(左詰めで、空きの列は属性なしとなる)という挙動です。

制限とパフォーマンス

DataTables JavaScript libraryを使用していて、一度に数百行しか読まないので軽いという説明がありますね。

ただ、列方向には弱く、

While rows are unbounded, columns are capped at 100. It’s not currently possible to virtualize columns in the same way as rows, and large numbers of columns cause the interface to slow significantly.

とあるように、環境次第ですが列数が1000超あたりで厳しい感じです。 私の環境では1000でも既に遅くなりはじめてます。しかし100列程度なら問題ないでしょう。縦横変換で列数がある程度増えてもデータが見れるかもしれません。

フィルタの保存

これは未実装とのこと。将来的にはdplyrのscriptで出力できるようになるかも?とのことで期待です。

実行環境について

前回の記事で書いていませんでしたが、下記のとおりです。

sessionInfo()
#> R version 3.4.3 (2017-11-30)
#> Platform: x86_64-w64-mingw32/x64 (64-bit)
#> Running under: Windows >= 8 x64 (build 9200)
#> 
#> Matrix products: default
#> 
#> locale:
#> [1] LC_COLLATE=Japanese_Japan.932  LC_CTYPE=Japanese_Japan.932   
#> [3] LC_MONETARY=Japanese_Japan.932 LC_NUMERIC=C                  
#> [5] LC_TIME=Japanese_Japan.932    
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> loaded via a namespace (and not attached):
#> [1] compiler_3.4.3 tools_3.4.3    yaml_2.1.16   


RStudio.Version()
#> $citation
#> 
#> To cite RStudio in publications use:
#> 
#>   RStudio Team (2016). RStudio: Integrated Development for R.
#>   RStudio, Inc., Boston, MA URL http://www.rstudio.com/.
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Manual{,
#>     title = {RStudio: Integrated Development Environment for R},
#>     author = {{RStudio Team}},
#>     organization = {RStudio, Inc.},
#>     address = {Boston, MA},
#>     year = {2016},
#>     url = {http://www.rstudio.com/},
#>   }
#> 
#> 
#> $mode
#> [1] "desktop"
#> 
#> $version
#> [1] ‘1.1.419’

長くなってきたのでこのあたりで。

追記

Minodaさんから質問があったので、調べてみました。↑で書いたラベルですが、日本語でも対応可能でした。確認したのはWindowsのみで他の環境で動作するかは未確認(というより環境ないのでわからない)ですが…。

Enjoy!!

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

niszet.hatenablog.com

niszet.hatenablog.com

niszet.hatenablog.com