【发布时间】:2011-07-30 16:34:44
【问题描述】:
我需要加载到 R 包:tseries 和 chron
两者都有一个名为 is.weekend 的函数
我的环境中总是有我加载的第二个包中的函数。
我怎样才能始终从 chron 访问该功能?
【问题讨论】:
标签: function r packages conflict
我需要加载到 R 包:tseries 和 chron
两者都有一个名为 is.weekend 的函数
我的环境中总是有我加载的第二个包中的函数。
我怎样才能始终从 chron 访问该功能?
【问题讨论】:
标签: function r packages conflict
您可能已经注意到,加载包的顺序会有所不同,即最后加载的包将掩盖之前加载的包中的功能。
要指定要使用的包,语法是:
chron::is.weekend()
tseries::is.weekend()
换句话说,使用packagename::functionname()
另外,如果你知道你会一直想使用chron中的函数,你可以定义自己的函数如下:
is.weekend <- chron::is.weekend #EDIT
【讨论】:
is.weekend<-chron::is.weekend 就够了。
::: 操作符是必需的。
base::`%in%` 或 `%in%` <- base::`%in%`
library(chron)
is.weekend.chron <- is.weekend
library(tseries)
那么你可以为 tseries 版本调用 is.weekend 或为 chron 版本调用 is.weekend.chron
【讨论】:
您应该使用 Hadly 的 conflicted 包。
library(conflicted)
library(dplyr)
filter(mtcars, am & cyl == 8)
那么冲突包会抛出错误,并强制你清楚地确定你喜欢哪个函数:
错误:在 2 个包中找到过滤器。你必须用 :: 指明你想要哪一个 * dplyr::过滤器 * 统计::过滤器
要解决整个会话的冲突,请使用<-:
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/
【讨论】:
我有 2 个具有相同函数名 ts() 的包 有相同的两个包是:
?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函数 我用过:因为帮助告诉我预测正在调用统计数据
时间序列对象(在包统计中
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")
【讨论】: