1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

tidyverseとRmiscは仲が悪い。。。

Posted at

今回もRの記事です。

tidyverseとRmisc

tidyverseはデータの可視化に優れたggplot2やパイプ演算子やグループ化、記述統計に便利なdplyrなどが詰まった「これひとつで何でも来いや」的な超便利パッケージです。

一方、ggplotを一度に表示したい場合に使うmultiplotの入ったこちらも優れたパッケージのRmisc。

どうやらこいつらの相性があまり良くないみたい、、

問題

一番わかりやすい問題はsummarize関数でしょうか。。

.r
> library(tidyverse)
>
> iris %>%
+   group_by(Species) %>%
+   summarize(mean = mean(Sepal.Length),
+             .groups = "drop") #.groups = "drop"でグループを解除
# A tibble: 3 x 2
  Species     mean
  <fct>      <dbl>
1 setosa      5.01
2 versicolor  5.94
3 virginica   6.59

みんな大好きgroup化とsummarize関数(summariseでも構いません)ですが、通常はこう表示されるはず。。

しかしRmiscもインポートしてしまうと、、

.r
> library(tidyverse)
> library(Rmisc)
>
> iris %>%
+   group_by(Species) %>%
+   summarize(mean = mean(Sepal.Length),
+             .groups = "drop")
      mean .groups
1 5.843333    drop

meanが一つしかありません。全体の平均を出しているのでしょうか。
「.groups」も列名として認識されちゃってます。。(泣
なにかよくわからないことになってしまいました。

原因は、、

原因はライブラリのインポート後に表示されるこれ。

.r
> library(tidyverse) #tidyverseのメッセージは省略
> library(Rmisc)
 要求されたパッケージ lattice をロード中です 
 要求されたパッケージ plyr をロード中です 
--------------------------------------------------------------------------------------------------------------------------------------------
You have loaded plyr after dplyr - this is likely to cause problems.
If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
library(plyr); library(dplyr)
--------------------------------------------------------------------------------------------------------------------------------------------

 次のパッケージを付け加えます: plyr 

 以下のオブジェクトは package:dplyr からマスクされています: 

     arrange, count, desc, failwith, id, mutate, rename, summarise, summarize 

 以下のオブジェクトは package:purrr からマスクされています: 

     compact 

いかにも怪しげですね。
これはsummarize関数がRmiscの(plyr)の中にも同じ関数が入っていて、関数がぶつかっちゃって、上書きしますよーーーってことなんです。

なので、下のように読みこむパッケージの順番を逆にすると、plyr::summarize( )がdplyr::summarize( )によって上書きされ、うまくいくのです。(「::」については後述)

.r
> library(Rmisc)
> library(tidyverse)
 Attaching packages ─────────────────────────────────────────────────── tidyverse 1.3.0 
 ggplot2 3.3.2      purrr   0.3.4
 tibble  3.0.3      dplyr   1.0.0
 tidyr   1.1.0      stringr 1.4.0
 readr   1.3.1      forcats 0.5.0
 Conflicts ──────────────────────────────────────────────────── tidyverse_conflicts() 
x dplyr::arrange()   masks plyr::arrange()
x purrr::compact()   masks plyr::compact()
x dplyr::count()     masks plyr::count()
x dplyr::failwith()  masks plyr::failwith()
x dplyr::filter()    masks stats::filter()
x dplyr::id()        masks plyr::id()
x dplyr::lag()       masks stats::lag()
x dplyr::mutate()    masks plyr::mutate()
x dplyr::rename()    masks plyr::rename()
x dplyr::summarise() masks plyr::summarise()
x dplyr::summarize() masks plyr::summarize()
>
> iris %>%
+   group_by(Species) %>%
+   summarize(mean = mean(Sepal.Length),
+             .groups = "drop")
# A tibble: 3 x 2
  Species     mean
  <fct>      <dbl>
1 setosa      5.01
2 versicolor  5.94
3 virginica   6.59

ややこしいですよね。

メッセージによると、arrange関数やmutate関数などよく使う関数でも衝突が起こっています。関数の使用が同じなら、問題なく使えるのですが、summarize関数のようなことが起こると、、、

# 解決策

二つのライブラリを同時読み込んでしまうとエラーメッセージのようなものがたくさん表示されてしまいますし、わざわざ順番を考えるのもめんどくさい!!ので、「::」を使いましょう。

「::」は、パッケージ名を指定して、関数を呼び出します。例えば、

.r
> dplyr::summarize()

このようにして使います。これを利用すれば、使いたいパッケージの使いたい関数を呼び出せるので問題なさそうですね。
install.packages( )でインストールさえしてあれば、library( )で呼び出していなくても使えます。

そのため、僕みたいに**「Rmiscはmultiplotしか使わないよ!」**なんて方は

.r
> #library(Rmisc) は使わずに

> Rmisc::multiplot(g1, g2)

で十分じゃないでしょうか。

まとめ

僕がつまずいたのはtidyverseとRmiscでしたが、パッケージは無限にあるので、他のパッケージ間でも同様のことが起こるかもしれません。

Rstudioの入力補完では、使おうとしている関数がどのパッケージのものなのか、わかるようになっています。

名称未設定.png

上の画像ではsummarizeの横に{dplyr}と書かれているので、dplyrから呼び出された関数が使われようとしています。

パッケージや関数を呼び出すときには十分注意して使いましょう!!

では〜〜 ^ - ^

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?