2014-06-13 25 views
38

seçmek ::: Ben bir hata alıyorum sonra dplyr::select çalıştırmayı yükdplyr :: seçme işlevi çatışmalar

library(MASS) 

:

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

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

Ben nasıl MASS paketi yüklü olarak dplyr::select kullanın? Pascal söylediği gibi

+4

Sen kullanabilirsiniz olarak

Dolayısıyla

select(mtcars, mpg) 

çalışacaktır: 'dplyr :: select (mpg)' –

cevap

40

, şu bu daha sık itiraf gerekenden daha benim başıma

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

Eğer MASS yüklemek için gidiyoruz eminseniz ve dplyr birlikte çok sık ve 'select' çok kullanın, işlevi yeniden atayabilirsiniz: select <- dplyr :: select 'dplyr ::' yazarak kaydetme yardımcı olabilir seçin 'defalarca – KFB

+1

Bu eski ama yine de biliyorum. Sadece aynı sorunla karşılaştı. Ve görünüşe göre MASS ggplot2 tarafından (diğerleri arasında) ithal ediliyor, bu yüzden bunların birçoğunu birlikte kullanacaklarını tahmin ediyorum. Her ne kadar ggplot2 ve dplyr kullanmadan önce problem yaşamadığımı düşünmeme rağmen ... – Latrunculia

+0

Benzer bir problemim var. Ancak, garip olan şu ki, bu sorun bugüne kadar gerçekleşmedi ve gerçekten kodumu değiştirmedim. Sadece hataya neden olan bölümü 'if (x == x) {...} 'durumuna getirdim. Bu hatanın neden birdenbire ortaya çıktığına dair herhangi bir fikir, daha önce nerede sorun yaşanmadı? – deca

12

çalışır. dplyr, diğer şeylerin yanı sıra, özellikle de bu kütüphanelerden birini kütüphane aracılığıyla yükleyen paketleri yüklerken (yapmamalılar, fakat bazıları hala yapılıyorsa) veya .Rprofile (yok!) 'a dplyr yüklediğinizde MASS::select, plyr::summarise ve stats::filter ile çakışıyor. Ve her zaman bir hata iletisi, özellikle plyr ile çatışmalar, oldukça belirsiz sorunlara yol açabilir.

Yalnızca kısa bir süre önce conflicts() işlevini öğrendim. İki paket aynı işlevlere sahip olduğunda yararlıdır, ancak "aşırı rapor" çakışmaları, ör. tidyr :: %>% ve dplyr :: %>%.

Bu yüzden bana kızgın olup olmadığımı veya gerçekte hataya neden olan bir çakışma olup olmadığını öğrenmek için a function yazdım. Sadece anlaşmazlıkları kontrol etmekle kalmaz, istenen bir paketin "üstte" olup olmadığını ve fonksiyonun gövdesinin gerçekten farklı olup olmadığını kontrol eder.

Varsayılan olarak dplyr için bunu yapar, ancak want_package parametresini kullanarak başka bir paket belirtebilirsiniz. Örneğin, çoğu paketlerde yeniden kullanılan recode ve alpha tarafından sık sık tetiklenir.

Kullanımı kolaydır: amigoingmad(). Varsayılan olarak

, bununla birlikte otomatik olarak "düzeltme" şeyler dplyr değilse "üstte", aşağıdaki komutları kullanarak: Bir kullanıcı tarafından belirtilen işlevi engelliyorsa işlevi rapor edeceğini

detach("package:dplyr", character.only = TRUE) 
library("dplyr", character.only = TRUE) 

Not dplyr, ancak güvenlik için bunu otomatik olarak düzeltir (sadece bu durumda işlevi kaldırın).

Bu çözüm henüz benim için herhangi bir sorun oluşturmamıştır. Tabii ki bunu üretim kodunda kullanmayı savunmam, fakat bir .Rmd -dosyası hata ayıkladığınızda ve yük sırasını kaza ile karıştırmış olsanız, bunu öğrenmenin hızlı bir yoludur.

Bir pakette bu isterseniz:

devtools::install_github("rubenarslan/formr") 
+1

Güzel. Kızgın olduğumu düşünmüştüm. – nigelhenry

3

Eğer yüklerseniz ilkMASS kütüphane ve ikinciselect fonksiyonun sonra dplyr biri

library (MASS) 
library (dplyr) 

ilk sürümü searchpaths() oturumunuzda dplyr kitaplığından biri olacak.Sadece yazdığı gibi

dplyr::select(mtcars, mpg)