R: 2 functions with the same name in 2 different packages

前端 未结 4 1303
無奈伤痛
無奈伤痛 2020-11-30 00:59

I need to load to R packages : tseries and chron

Both have a function named is.weekend

I always have in my environment the function from the second package I

相关标签:
4条回答
  • 2020-11-30 01:24

    You have probably already noticed that the order of loading the packages makes a difference, i.e. the package that gets loaded last will mask the functions in packages loaded earlier.

    To specify the package that you want to use, the syntax is:

    chron::is.weekend()
    tseries::is.weekend()
    

    In other words, use packagename::functionname()

    In addition, if you know that you will always want to use the function in chron, you can define your own function as follows:

    is.weekend <- chron::is.weekend    #EDIT
    
    0 讨论(0)
  • 2020-11-30 01:35

    i had 2 packages who had same function name ts() The 2 pacckages who had the same were :

    1. forecast
    2. List item

    I inspected what was going on by typing

    ?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)
    

    Solution : Then to use the function ts that comes with package forecast i used : because the help showed me that forcast was calling stats

    Time-Series Objects (in package stats

    stats::ts
    

    because is saw from help that forecasts use a package called stats ;)

    forecast::ts
    
    Time-Series Objects
    (in package stats
    

    was giving me error, because forecast package was using a sub package ;

    so final usage looks like this :

    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")
    
    0 讨论(0)
  • 2020-11-30 01:37
    library(chron)
    is.weekend.chron <- is.weekend
    library(tseries)
    

    then you can call is.weekend for the tseries version or is.weekend.chron for the chron version

    0 讨论(0)
  • 2020-11-30 01:38

    you should turn to the conflicted package from Hadly.

    library(conflicted)
    library(dplyr)
    filter(mtcars, am & cyl == 8)
    

    Then the conflicted package will throw an error and will force you clearly determine which function you prefer:

    Error: filter found in 2 packages. You must indicate which one you want with :: * dplyr::filter * stats::filter

    To resolve conflicts for your entire session, use <-:

    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
    

    You can also turn to the conflict_prefer() function which can determine the winner when a conflict occur. The code example is borrowed from Hadly, pls refer to the package website. https://www.tidyverse.org/blog/2018/06/conflicted/

    0 讨论(0)
提交回复
热议问题