R:2个函数在2个不同的包中具有相同的名称

时间:2011-04-06 10:01:09

标签: function r packages conflict

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

两者都有一个名为is.weekend

的函数

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

如何从chron?

中随时访问该函数

4 个答案:

答案 0 :(得分:75)

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

要指定要使用的包,语法为:

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

换句话说,请使用packagename::functionname()

此外,如果你知道你总是想在chron中使用这个函数,你可以按如下方式定义自己的函数:

is.weekend <- chron::is.weekend    #EDIT

答案 1 :(得分:3)

library(chron)
is.weekend.chron <- is.weekend
library(tseries)

然后你可以为tseries版本调用is.weekend,或者为chron版本调用is.weekend.chron

答案 2 :(得分:1)

您应该转到Hadly的conflicted软件包。 library(conflicted) library(dplyr) filter(mtcars, am & cyl == 8) 然后,有冲突的程序包将引发错误,并迫使您清楚地确定要使用的功能:

  

错误:在2个程序包中找到了过滤器。您必须使用::指示要使用哪一个    * dplyr ::过滤器    * 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()函数,该函数可以在发生冲突时确定赢家。 该代码示例是从Hadly借来的,请参考该软件包的网站。 https://www.tidyverse.org/blog/2018/06/conflicted/

答案 3 :(得分:0)

我有2个软件包,它们的函数名称均为ts() 相同的2个包装是:

  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)

解决方案:然后使用包预测附带的功能ts 我曾经用过:因为帮助显示出forcast正在调用统计信息

  

时间序列对象(在软件包统计信息中

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