Sie haben wahrscheinlich bereits bemerkt, dass die Reihenfolge des Ladens der Pakete einen Unterschied macht, dh das zuletzt geladene Paket maskiert die Funktionen in zuvor geladenen Paketen.
Um das Paket anzugeben, das Sie verwenden möchten, lautet die Syntax wie folgt:
chron::is.weekend()
tseries::is.weekend()
Mit anderen Worten, verwenden Sie packagename::functionname()
Wenn Sie wissen, dass Sie die Funktion immer in chron verwenden möchten, können Sie Ihre eigene Funktion wie folgt definieren:
Hier nicht relevant, also nur zum späteren Nachschlagen in diesem Thread: Wenn die Funktion nicht exportiert wird (dh Sie möchten eine bestimmte S3-Methode und die Methode wird nicht exportiert, aber die generische), ist der :::Operator erforderlich.
Gavin Simpson
3
@ Gavin Das ist richtig, aber ich bin immer sehr vorsichtig, wenn ich mich auf eine Funktion beziehe, die nicht exportiert wird. Vermutlich hat der Paketautor es aus einem bestimmten Grund nicht exportiert und konnte die Funktion ohne Vorwarnung ändern. Um Code zu schützen, der von dieser Art von Funktion abhängig ist, ist es möglicherweise besser, entweder den Paketautor zum Exportieren dieser Funktion zu überreden oder die Erlaubnis zur Wiederverwendung in Ihrem eigenen Code zu erhalten.
Andrie
1
Ich stimme dem Produktionscode in einem Paket voll und ganz zu. Für den persönlichen Gebrauch sehe ich die Probleme nicht, solange man die genaue Version der Paketquellen archiviert und Details darüber aufzeichnet, welche Versionen von Paketen im Datenanalysecode verwendet werden. Dies gilt natürlich für jede Verwendung von Paketcode, da Sie die Launen der Paketentwickler sind, um Änderungen vorzunehmen, und der gesamte Code enthält wahrscheinlich einige Fehler ... Das Hauptproblem ist meiner Meinung nach die Reproduzierbarkeit, der Rest müssen wir akzeptieren und leben mit, aber mindestens einer kann den Code sehen und überprüfen, ob er mit R- und (den meisten) R-Paketen funktioniert.
Gavin Simpson
3
@LauriK Verwenden Sie base::`%in%`oder`%in%` <- base::`%in%`
Sie sollten sich an das conflictedPaket von Hadly wenden.
library(conflicted)
library(dplyr)
filter(mtcars, am & cyl == 8)
Dann wird das in Konflikt stehende Paket einen Fehler auslösen und Sie zwingen, klar zu bestimmen, welche Funktion Sie bevorzugen:
Fehler: Filter in 2 Paketen gefunden. Sie müssen angeben, welche Sie mit :: * dplyr :: filter * stats :: filter möchten
Verwenden Sie Folgendes, um Konflikte für Ihre gesamte Sitzung zu lösen <-:
filter <- dplyr::filter
filter(mtcars, am & cyl == 8)
mpg cyl disp hp drat wt qsec vs am gear carb
115.883512644.223.1714.50154215.083013353.543.5714.60158
Sie können sich auch der conflict_prefer()Funktion zuwenden, mit der der Gewinner ermittelt werden kann, wenn ein Konflikt auftritt. Das Codebeispiel wurde von Hadly ausgeliehen. Bitte beziehen Sie sich auf die Paket-Website.
https://www.tidyverse.org/blog/2018/06/conflicted/
Ich hatte 2 Pakete, die den gleichen Funktionsnamen hatten ts () Die 2 Pakete, die den gleichen Namen hatten, waren:
Prognose
Listenpunkt
Ich überprüfte, was los war, indem ich tippte
?ts
Help on topic 'ts' was found in the following packages:
Time-Series Objects
(in package stats in library C:/Program Files/R/R-3.6.2/library)
Format time stamps
(in package bReeze in library C:/Users/mycomputer/Documents/R/win-library/3.6)
Lösung: Um dann die Funktion ts zu verwenden, die mit der Paketvorhersage geliefert wird, die ich verwendet habe: weil die Hilfe mir zeigte, dass forcast Statistiken aufruft
Zeitreihenobjekte (in Paketstatistiken
stats::ts
weil aus der Hilfe hervorgeht, dass Prognosen ein Paket namens stats verwenden;)
forecast::ts
Time-Series Objects
(in package stats
gab mir einen Fehler, weil das Prognosepaket ein Unterpaket verwendete;
Die endgültige Verwendung sieht also folgendermaßen aus:
library(bReeze)
library(forecast)
# Subset data
my_time_series <- stats::ts(c(df_sub$y), start=2018, frequency = 12)
# Plot
theme_set(theme_classic())
ggseasonplot(my_time_series) + labs(title="My graph title")
Antworten:
Sie haben wahrscheinlich bereits bemerkt, dass die Reihenfolge des Ladens der Pakete einen Unterschied macht, dh das zuletzt geladene Paket maskiert die Funktionen in zuvor geladenen Paketen.
Um das Paket anzugeben, das Sie verwenden möchten, lautet die Syntax wie folgt:
Mit anderen Worten, verwenden Sie
packagename::functionname()
Wenn Sie wissen, dass Sie die Funktion immer in chron verwenden möchten, können Sie Ihre eigene Funktion wie folgt definieren:
is.weekend <- chron::is.weekend #EDIT
quelle
is.weekend<-chron::is.weekend
reicht.:::
Operator erforderlich.base::`%in%`
oder`%in%` <- base::`%in%`
dann können Sie is.weekend für die tseries-Version oder is.weekend.chron für die chron-Version aufrufen
quelle
Sie sollten sich an das
conflicted
Paket von Hadly wenden.library(conflicted) library(dplyr) filter(mtcars, am & cyl == 8)
Dann wird das in Konflikt stehende Paket einen Fehler auslösen und Sie zwingen, klar zu bestimmen, welche Funktion Sie bevorzugen:
Verwenden Sie Folgendes, um Konflikte für Ihre gesamte Sitzung zu lösen
<-
:filter <- dplyr::filter filter(mtcars, am & cyl == 8)
mpg cyl disp hp drat wt qsec vs am gear carb 1 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4 2 15.0 8 301 335 3.54 3.57 14.6 0 1 5 8
Sie können sich auch der
conflict_prefer()
Funktion zuwenden, mit der der Gewinner ermittelt werden kann, wenn ein Konflikt auftritt. Das Codebeispiel wurde von Hadly ausgeliehen. Bitte beziehen Sie sich auf die Paket-Website. https://www.tidyverse.org/blog/2018/06/conflicted/quelle
Ich hatte 2 Pakete, die den gleichen Funktionsnamen hatten ts () Die 2 Pakete, die den gleichen Namen hatten, waren:
Ich überprüfte, was los war, indem ich tippte
?ts Help on topic 'ts' was found in the following packages: Time-Series Objects (in package stats in library C:/Program Files/R/R-3.6.2/library) Format time stamps (in package bReeze in library C:/Users/mycomputer/Documents/R/win-library/3.6)
Lösung: Um dann die Funktion ts zu verwenden, die mit der Paketvorhersage geliefert wird, die ich verwendet habe: weil die Hilfe mir zeigte, dass forcast Statistiken aufruft
weil aus der Hilfe hervorgeht, dass Prognosen ein Paket namens stats verwenden;)
forecast::ts Time-Series Objects (in package stats
gab mir einen Fehler, weil das Prognosepaket ein Unterpaket verwendete;
Die endgültige Verwendung sieht also folgendermaßen aus:
library(bReeze) library(forecast) # Subset data my_time_series <- stats::ts(c(df_sub$y), start=2018, frequency = 12) # Plot theme_set(theme_classic()) ggseasonplot(my_time_series) + labs(title="My graph title")
quelle