library(dplyr)
library(MASS)
<-
mtcars_small %>%
mtcars select(hp, am)
Error in select(., hp, am): unused arguments (hp, am)
November 15, 2023
R spuckt eine komische Fehlermeldung aus. Was ist nur los? Hat R einen schlechten Tag?
Schauen wir uns die Sache näher an:
Error in select(., hp, am): unused arguments (hp, am)
Oh nein! Fehler!
Was ist nur los?
Hinweise:
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.
Zuerst “entladen” wir MASS
, da wir es nicht benötigen:
Alternativ (und einfacher) könnten wir R neu starten: Session > Restart R
.
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!
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
conflicted
nutzenHier gibt’s dazu nähere Infos.
Categories:
---
exname: Typ-Fehler-R-08-name-clash
expoints: 1
extype: string
exsolution: NA
categories:
- R
- error
- string
- mtcars
date: '2023-11-15'
slug: Typ-Fehler-R-08-name-clash
title: Typ-Fehler-R-08-name-clash
---
# Aufgabe
R spuckt eine komische Fehlermeldung aus.
Was ist nur los?
Hat R einen schlechten Tag?
Schauen wir uns die Sache näher an:
```{r error=TRUE}
library(dplyr)
library(MASS)
mtcars_small <-
mtcars %>%
select(hp, am)
```
Oh nein! Fehler!
Was ist nur los?
Hinweise:
- Orientieren Sie sich im Übrigen an den [allgemeinen Hinweisen des Datenwerks](https://datenwerk.netlify.app/hinweise).
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
# 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:
```{r}
detach("package:MASS", unload = TRUE)
```
Alternativ (und einfacher) könnten wir R neu starten: `Session > Restart R`.
```{r error=TRUE}
library(dplyr)
#library(MASS)
mtcars %>%
select(hp, am)
```
Und schon geht's!
2. Paketnamen vor Funktionsnamen anfügen
```{r error=TRUE}
#library(dplyr)
#library(MASS)
mtcars %>%
dplyr::select(hp, am) %>%
dplyr::filter(hp > 200)
```
3. Paket `conflicted` nutzen
[Hier](https://conflicted.r-lib.org/) gibt's dazu nähere Infos.
---
Categories:
- R
- error
- string