为了
ropensci/drake#489
,我想为
tibbles
阶级的
"drake_plan"
. 我读了
guide on extending
tibble
,这对某些需求很有帮助。但是新的
“德雷克计划”
S3课程在
dplyr
操作。
#' @title Mark a data frame as a `drake` workflow plan
#' @description Used for pretty printing only (coming soon).
#' You do not actually have to mark plans as such.
#' You can keep them as ordinary data frames.
#' @export
#' @keywords internal
#' @param x object to mark as a `drake` plan
#' @param ... other arguments to the method
#' @examples
#' plan <- list(target = "x", command = "get_data()")
#' class(plan)
#' plan <- as_drake_plan(plan)
#' class(plan)
as_drake_plan <- function(x){
UseMethod("as_drake_plan")
}
as_drake_plan_ <- function(x, ...){
tibble::new_tibble(x, ..., subclass = "drake_plan")
}
#' @export
`[.drake_plan` <- function(...){
as_drake_plan_(NextMethod())
}
#' @export
#' @rdname as_drake_plan
as_drake_plan.data.frame <- as_drake_plan_
#' @export
#' @rdname as_drake_plan
as_drake_plan.list <- as_drake_plan_
#' @export
#' @rdname as_drake_plan
as_drake_plan.tbl_df <- as_drake_plan_
library(dplyr)
library(drake)
plan <- drake_plan(
x = get_data(),
y = analyze_data(x)
) %>%
as_drake_plan() %>%
print
#> # A tibble: 2 x 2
#> target command
#> * <chr> <chr>
#> 1 x get_data()
#> 2 y analyze_data(x)
class(plan)
#> [1] "drake_plan" "tbl_df" "tbl" "data.frame"
filter(plan, target == "x") %>%
class()
#> [1] "tbl_df" "tbl" "data.frame"
而且
dplyr公司
函数,是否有其他情况可以从
藏
s?