在两个不同的包中使用相同名称的2个函数

我需要加载到 R 包: tSeries 和 chron

Both have a function named is.weekend

在我的环境中总是有来自我加载的第二个包的函数。

我如何总是访问函数,比方说,chron?

72257 次浏览

您可能已经注意到,加载包的顺序会产生不同,即最后加载的包将掩盖之前加载的包中的函数。

若要指定要使用的包,语法如下:

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

In other words, use packagename::functionname()

此外,如果您知道您总是希望在 chron 中使用该函数,那么您可以将自己的函数定义如下:

is.weekend <- chron::is.weekend    #EDIT
library(chron)
is.weekend.chron <- is.weekend
library(tseries)

然后您可以为 tseryversion 调用 is.week,或者为 chron 版本调用 is.Weeend.chron

你应该看看 Hadly 的 ABc0套餐。

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

然后,冲突包会抛出一个错误,迫使你清楚地确定你更喜欢哪个函数:

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

若要解决整个会话中的冲突,请使用 <-:

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

您还可以转向 conflict_prefer()函数,它可以确定冲突发生时的赢家。 代码示例是借用了哈德利,请参考软件包网站。 https://www.tidyverse.org/blog/2018/06/conflicted/

i had 2 packages who had same function name ts() 有两个包裹是一样的:

  1. 天气预报
  2. 列表项目

我通过打字检查正在发生的事情

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

解决方案: 然后使用包预测附带的函数 t i used : because the help showed me that forcast was calling stats

时间序列对象(包统计数据)

stats::ts

因为从帮助中可以看出,预测使用了一个名为 stats 的软件包;)

forecast::ts


Time-Series Objects
(in package stats

是给我的错误,因为预测包是使用子包;

所以最终的用法是这样的:

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