在函数 R 中需要包
Requiring packages inside a function R
我有一个问题,我正在用 R 制作一个包(专为我)。
所以我正在编写函数 sets
并且在 sets
内部我使用了很多 dplyr
函数。
如果你要使用我的包裹,我该怎么做,你必须有 dplyr
。
我觉得是with require()
里面的函数?我在阅读有关此功能的内容时感到更加困惑。
我想它应该是这样的:
sets <- function(base, start, end, f_hor, freq=12){
require(dplyr, lubridate)
train <- base %>%
filter(year(date)>=as.Date(start)) %>%
filter(year(date)<=as.Date(end)) %>% select(-date)
train <- ts(train,
start=c(year(as.Date(start)),month(as.Date(start))),
end=c(year(as.Date(end)),month(as.Date(end))),
frequency = freq)
test <- base %>%
filter(year(date)<as.Date(end)) %>% select(-date)
test <- head(test, f_hor)
list <- list(train, test)
names(list) <- c("train", "test")
return(list)
}
我说得对吗?
提前致谢!
您可能希望使用 @import
标记将其包含在函数顶部的 roxygen
框架中。您也可以考虑使用 @importFrom
类似于:
#' My function called sets
#'
#' @param base ...
#' @param start
#' @param end
#' @param f_hor
#' @param freq
#'
#' @return a list...
#'
#' @import dplyr
#' @import lubridate
#' @importFrom lubridate year month
#'
#' @export
sets <- function(base, start, end, f_hor, freq = 12){
}
此外,在您的函数中,您可以选择显式调用特定包中的函数,即:
sets <- function(base, start, end, f_hor, freq = 12){
train <- base %>%
dplyr::filter(lubridate::year(date)>=as.Date(start)) %>%
dplyr::filter(lubridate::year(date)<=as.Date(end)) %>% select(-date)
}
如果您使用的是 Roxygen,请按照@Matt 的说明进行操作。如果你不是,那么你需要这样做:在 DESCRIPTION
文件的 Imports:
列表中列出你想要的包,例如
Imports: lubridate, dplyr
这保证您的包不会在没有这两个包可用的情况下加载。
您还需要执行以下操作之一:
在您的 NAMESPACE
文件中列出导入的函数,例如
importFrom(lubridate, year, month)
然后就像它们是本地定义的一样使用它们,或者每次调用它们时都使用 ::
前缀,例如
lubridate::year(date)
我不确定这两个步骤如何对应 Roxygen 标签。
我有一个问题,我正在用 R 制作一个包(专为我)。
所以我正在编写函数 sets
并且在 sets
内部我使用了很多 dplyr
函数。
如果你要使用我的包裹,我该怎么做,你必须有 dplyr
。
我觉得是with require()
里面的函数?我在阅读有关此功能的内容时感到更加困惑。
我想它应该是这样的:
sets <- function(base, start, end, f_hor, freq=12){
require(dplyr, lubridate)
train <- base %>%
filter(year(date)>=as.Date(start)) %>%
filter(year(date)<=as.Date(end)) %>% select(-date)
train <- ts(train,
start=c(year(as.Date(start)),month(as.Date(start))),
end=c(year(as.Date(end)),month(as.Date(end))),
frequency = freq)
test <- base %>%
filter(year(date)<as.Date(end)) %>% select(-date)
test <- head(test, f_hor)
list <- list(train, test)
names(list) <- c("train", "test")
return(list)
}
我说得对吗?
提前致谢!
您可能希望使用 @import
标记将其包含在函数顶部的 roxygen
框架中。您也可以考虑使用 @importFrom
类似于:
#' My function called sets
#'
#' @param base ...
#' @param start
#' @param end
#' @param f_hor
#' @param freq
#'
#' @return a list...
#'
#' @import dplyr
#' @import lubridate
#' @importFrom lubridate year month
#'
#' @export
sets <- function(base, start, end, f_hor, freq = 12){
}
此外,在您的函数中,您可以选择显式调用特定包中的函数,即:
sets <- function(base, start, end, f_hor, freq = 12){
train <- base %>%
dplyr::filter(lubridate::year(date)>=as.Date(start)) %>%
dplyr::filter(lubridate::year(date)<=as.Date(end)) %>% select(-date)
}
如果您使用的是 Roxygen,请按照@Matt 的说明进行操作。如果你不是,那么你需要这样做:在 DESCRIPTION
文件的 Imports:
列表中列出你想要的包,例如
Imports: lubridate, dplyr
这保证您的包不会在没有这两个包可用的情况下加载。
您还需要执行以下操作之一:
在您的 NAMESPACE
文件中列出导入的函数,例如
importFrom(lubridate, year, month)
然后就像它们是本地定义的一样使用它们,或者每次调用它们时都使用 ::
前缀,例如
lubridate::year(date)
我不确定这两个步骤如何对应 Roxygen 标签。