2014-06-13 7 views
38

Если я загружаю MASS пакет:dplyr :: Функция выбора столкновений с MASS :: выбрать

library(MASS) 

затем загрузить попробовать запустить dplyr::select, я получаю сообщение об ошибке:

library(dplyr) 
mtcars %.% 
select(mpg) 

# Error in select(`__prev`, mpg) : unused argument (mpg) 

Как я могу использовать dplyr::select с пакетом MASS?

+4

Вы можете использовать его как вы только что написал: 'dplyr :: выберите (мили на галлон)' –

ответ

40

Как сказал Паскаль, следующие работы

require(MASS) 
require(dplyr) 
mtcars %>% 
    dplyr::select(mpg) 
+17

Если вы уверены, что вы собираетесь загрузить MASS и dplyr вместе очень часто и много используйте «select», вы можете переназначить функцию: выберите <- dplyr :: select, который может помочь сохранить ввод «dplyr ::» повторно – KFB

+1

Я знаю, что это старый, но в любом случае. Просто столкнулся с той же проблемой. И, по-видимому, MASS импортируется (в том числе) ggplot2, поэтому я думаю, что многие из них, вероятно, будут использовать их вместе. Хотя я считаю, что я использовал ggplot2 и dplyr без проблем до ... – Latrunculia

+0

У меня есть аналогичная проблема. Однако странно, что эта проблема не возникала до сегодняшнего дня, и я действительно не менял свой код. Я только подключил раздел, вызывающий ошибку, в условие 'if (x == x) {...}'. Любые идеи, почему эта ошибка внезапно появляется, где раньше не было проблем? – deca

12

Это происходит со мной чаще, чем я должен признать. dplyr сталкивается с MASS::select, plyr::summarise и stats::filter, в частности, при загрузке пакетов, которые загружают одну из этих библиотек через библиотеку (они не должны, но некоторые еще не работают), или когда вы загружаете dplyr в свой .Rprofile (не надо!). И это может привести к довольно неясным проблемам, а не всегда сообщению об ошибке, особенно конфликтует с plyr.

Я только недавно узнал о функции conflicts(). Это полезно, но конфликты «over-reports», когда два пакета имеют одинаковые функции, например. tidyr :: %>% и dplyr :: %>%.

Так что я написал a function, чтобы сказать мне, сойду ли я с ума или на самом деле возникает конфликт, вызывающий текущую ошибку. Он не только проверяет наличие конфликтов, но проверяет, является ли определенный желаемый пакет «сверху» и действительно ли тела функции отличаются.

Он делает это для 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") 
+1

Красивые. Я думал, что сойду с ума. – nigelhenry

3

При загрузке первыйMASS библиотека и второйdplyr один

library (MASS) 
library (dplyr) 

тогда первая версия функции select в вашей сессии searchpaths() будет в библиотеке dplyr.

Следовательно

select(mtcars, mpg) 

будет работать как

dplyr::select(mtcars, mpg)