Typ-Fehler-R-08-name-clash

R
error
string
Published

November 15, 2023

Aufgabe

R spuckt eine komische Fehlermeldung aus. Was ist nur los? Hat R einen schlechten Tag?

Schauen wir uns die Sache näher an:

library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(MASS)

Attaching package: 'MASS'
The following object is masked from 'package:dplyr':

    select
mtcars_small <-
  mtcars %>% 
  select(hp, am)
Error in select(., hp, am): unused arguments (hp, am)

Oh nein! Fehler!

Was ist nur los?

Hinweise:











Lösung

Das Problem ist, dass es in beiden Paketen, {MASS} und {dplyr} (dasjenige Paket im tidyverse, in dem select() wohnt), eine Funktion namens select vorhanden ist.

Es kommt zu einem “Name Clash”, einer Namenskollision.

Wenn mehrere Funktion gleichen Namens geladen (“attached”) sind, so “gewinnt” diejenige Funktion, die als letztes geladen wurde, in unserem Fall ist das die Funktion aus {MASS}.

Es gibt eine Reihe von Lösungen.

  1. Nur das benötigte Paket starten

Zuerst “entladen” wir MASS, da wir es nicht benötigen:

detach("package:MASS", unload = TRUE)

Alternativ (und einfacher) könnten wir R neu starten: Session > Restart R.

library(dplyr)
#library(MASS)

mtcars %>% 
  select(hp, am)
                     hp am
Mazda RX4           110  1
Mazda RX4 Wag       110  1
Datsun 710           93  1
Hornet 4 Drive      110  0
Hornet Sportabout   175  0
Valiant             105  0
Duster 360          245  0
Merc 240D            62  0
Merc 230             95  0
Merc 280            123  0
Merc 280C           123  0
Merc 450SE          180  0
Merc 450SL          180  0
Merc 450SLC         180  0
Cadillac Fleetwood  205  0
Lincoln Continental 215  0
Chrysler Imperial   230  0
Fiat 128             66  1
Honda Civic          52  1
Toyota Corolla       65  1
Toyota Corona        97  0
Dodge Challenger    150  0
AMC Javelin         150  0
Camaro Z28          245  0
Pontiac Firebird    175  0
Fiat X1-9            66  1
Porsche 914-2        91  1
Lotus Europa        113  1
Ford Pantera L      264  1
Ferrari Dino        175  1
Maserati Bora       335  1
Volvo 142E          109  1

Und schon geht’s!

  1. Paketnamen vor Funktionsnamen anfügen
#library(dplyr)
#library(MASS)

mtcars %>% 
  dplyr::select(hp, am) %>% 
  dplyr::filter(hp > 200)
                     hp am
Duster 360          245  0
Cadillac Fleetwood  205  0
Lincoln Continental 215  0
Chrysler Imperial   230  0
Camaro Z28          245  0
Ford Pantera L      264  1
Maserati Bora       335  1
  1. Paket conflicted nutzen

Hier gibt’s dazu nähere Infos.


Categories:

  • R
  • error
  • string