MASS
パッケージをロードした場合:
library(MASS)
ロードしてからdplyr::select
、エラーが表示されます。
library(dplyr)
mtcars %.%
select(mpg)
# Error in select(`__prev`, mpg) : unused argument (mpg)
どうすれば_dplyr::select
MASS
パッケージがロードされていますか?
パスカルが言ったように、次の作品
require(MASS)
require(dplyr)
mtcars %>%
dplyr::select(mpg)
これは私が認めるよりも頻繁に起こります。 dplyrは、特にライブラリを介してこれらのライブラリの1つをロードするパッケージをロードする場合(そうすべきではありませんが、まだ実行するものもあります)、またはMASS::select
でdplyrをロードする場合(しないでください)で、特にplyr::summarise
、stats::filter
、および.Rprofile
と衝突しますそして、それはかなり曖昧な問題につながる可能性があり、常にエラーメッセージではなく、特にplyr
と競合します。
私は最近conflicts()
関数について学びました。便利ですが、2つのパッケージに同じ機能がある場合、「オーバーレポート」が競合します。 tidyr :: %>%
およびdplyr :: %>%
。
そこで、私は 関数 と書いて、気が狂っているかどうか、または実際に現在のバグを引き起こしている競合があるかどうかを教えてくれました。競合をチェックするだけでなく、特定の目的のパッケージが「トップ」にあるかどうか、および関数の本体が実際に異なるかどうかもチェックします。
デフォルトではdplyrに対してこれを行いますが、want_package
パラメーターを使用して別のパッケージを指定できます。たとえば、多くのパッケージで再利用されるrecode
とalpha
につまずくことがよくあります。
使用法は単純です:amigoingmad()
。
デフォルトでは、次のコマンドを使用して、dplyrが「上」にない場合にも自動的に「修正」されます。
detach("package:dplyr", character.only = TRUE)
library("dplyr", character.only = TRUE)
この関数は、ユーザー指定の関数がdplyrをブロックしている場合に報告しますが、安全のためにこれを自動的に修正しません(その場合は関数を削除するだけです)。
まだ、このソリューションは私に問題を引き起こしていません。もちろん、本番コードでこれを使用することは推奨しませんが、.Rmd
-ファイルをデバッグしていて、誤ってロード順序を台無しにした可能性がある場合は、簡単に見つける方法です。
パッケージでこれが必要な場合:
devtools::install_github("rubenarslan/formr")
firstMASS
ライブラリーとseconddplyr
oneをロードする場合
_library (MASS)
library (dplyr)
_
セッションのselect
関数の最初のバージョンsearchpaths ()
はdplyr
ライブラリーのバージョンになります。
したがって
_select(mtcars, mpg)
_
として動作します
_dplyr::select(mtcars, mpg)
_
上記のKFBのコメントと同様に、私が見つけた簡単な解決策の1つは、(1)パッケージをロードする、(2)順序を気にしない(依存関係がある場合は難しい)、(3)どのパッケージにも優先順位を割り当てることですd名前空間を「所有」することを好む:
select <- dplyr::select
filter <- dplyr::filter
たとえば、environment: namespace
以下の変更:
library(MASS)
select
function (obj)
UseMethod("select")
<bytecode: 0x7fbe822811b8>
<environment: namespace:MASS>
select <- dplyr::select
select
function (.data, ...)
{
UseMethod("select")
}
<bytecode: 0x7fbe7c4a2f08>
<environment: namespace:dplyr>
エレガントなソリューションは、次のようなconflicted
パッケージを使用することです。
https://github.com/r-lib/conflicted の一部のコード例を参照してください
# install.packages("devtools")
devtools::install_github("r-lib/conflicted")
library(conflicted)
library(dplyr)
# example of informative error message
filter(mtcars, cyl == 8)
#> Error: [conflicted] `filter` found in 2 packages.
#> Either pick the one you want with `::`
#> * dplyr::filter
#> * stats::filter
#> Or declare a preference with `conflicted_prefer()`
#> * conflict_prefer("filter", "dplyr")
#> * conflict_prefer("filter", "stats")
# example of assigning priority with conflict_prefer function
conflict_prefer("filter", "dplyr")
filter(mtcars, cyl == 8) %>% head(2)
# mpg cyl disp hp drat wt qsec vs am gear carb
# 1 18.7 8 360.0 175 3.15 3.44 17.02 0 0 3 2
# 2 14.3 8 360.0 245 3.21 3.57 15.84 0 0 3 4