Różnica między require() a biblioteką() w r


Do ładowania pakietów w R można używać zarówno funkcji require(), jak i Library() , ale istnieje między nimi subtelna różnica:

  • require() wyświetli ostrzeżenie, jeśli pakiet nie jest zainstalowany, a następnie będzie kontynuować wykonywanie kodu.
  • biblioteka() zgłosi błąd i zatrzyma wykonywanie kodu.

Z powodu tej różnicy funkcja require() jest zwykle używana tylko wtedy, gdy ładujesz pakiety do funkcji, tak aby funkcja nadal działała, nawet jeśli pakiet nie istnieje.

W praktyce większość programistów zaleca używanie biblioteki() , ponieważ będziesz chciał otrzymać komunikat o błędzie informujący, że pakiet nie został zainstalowany.

Jest to coś, o czym powinieneś wiedzieć jak najwcześniej podczas pisania kodu.

Poniższy przykład ilustruje w praktyce różnicę między funkcjami require() i Library() .

Przykład: różnica między require() a biblioteką() w R

Załóżmy, że chcemy załadować zestaw danych BostonHousing z pakietu mlbench , ale załóżmy, że pakiet mlbench nie jest jeszcze zainstalowany.

Poniższy kod ilustruje sposób użycia funkcji biblioteki() do próby załadowania tego pakietu i przeprowadzenia analizy danych w zestawie danych BostonHousing :

 #attempt to load mlbench library
library (mlbench)

Error in library(mlbench): there is no package called 'mlbench'

#load Boston Housing dataset
data(BostonHousing)

#view summary of Boston Housing dataset
summary(BostonHousing)

#view total number of rows in Boston Housing dataset
nrow(BostonHousing)

Ponieważ pakiet mlbench nie jest jeszcze zainstalowany, przy użyciu funkcji Library() pojawia się błąd, a reszta kodu nie jest nawet wykonywana.

Jest to przydatne, ponieważ natychmiast informuje nas, że ten pakiet nie jest zainstalowany i że musimy go zainstalować przed kontynuowaniem.

Załóżmy jednak, że zamiast tego używamy require() do załadowania pakietu mlbench :

 #attempt to load mlbench library
require (mlbench)

Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
  there is no package called 'mlbench'

#load Boston Housing dataset
data(BostonHousing)

Warning message:
In data(BostonHousing) : data set 'BostonHousing' not found

#view summary of Boston Housing dataset
summary(BostonHousing)

Error in summary(BostonHousing): object 'BostonHousing' not found

#view total number of rows in Boston Housing dataset
nrow(BostonHousing)

W tym przykładzie komunikat o błędzie nie zostanie wyświetlony, dopóki nie spróbujemy użyć funkcji podsumowania() w celu podsumowania zbioru danych BostonHousing .

Zamiast tego po użyciu funkcji require() otrzymujemy ostrzeżenie, a reszta kodu jest wykonywana do momentu napotkania błędu.

Ten przykład ilustruje różnicę między biblioteką() a wymaganiem() w R: Funkcja biblioteki() natychmiast generuje błąd i nie wykonuje reszty kodu, ponieważ mlbench nie jest załadowany.

Dlatego w większości scenariuszy będziesz chciał użyć funkcji biblioteki() podczas ładowania pakietów.

Bonus: sprawdź, czy dany pakiet jest zainstalowany

Możemy użyć funkcji system.file() , aby sprawdzić, czy dany pakiet jest zainstalowany w naszym bieżącym środowisku R.

Na przykład możemy użyć następującej składni, aby sprawdzić, czy pakiet ggplot2 jest zainstalowany w bieżącym środowisku R:

 #check if ggplot2 is installed
system. file (package=' ggplot2 ')

[1] "C:/Users/bob/Documents/R/win-library/4.0/ggplot2"

Ponieważ zainstalowano ggplot2, funkcja po prostu zwraca ścieżkę pliku, w którym zainstalowany jest pakiet.

Załóżmy teraz, że sprawdzamy, czy pakiet mlbench jest zainstalowany:

 #check if mlbench is installed
system. file (package=' mlbench ')

[1] ""

Funkcja zwraca pusty ciąg znaków, który informuje nas, że pakiet mlbench nie jest zainstalowany w naszym obecnym środowisku.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:

Jak załadować wiele pakietów w R
Jak wyczyścić środowisko w R
Jak wyczyścić wszystkie działki w RStudio

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *