R/LA-class.R

Defines functions LoanAcquisitionDataset

#' @import fst
setOldClass("fst_table")

#' LoanAcquisitionDataset
#'
#' A \code{\link[fst]{fst}} dataset containing loan attributes available at origination
#'
#' @family Loan Level Datasets
#' @name LoanAcquisitionDataset-class
#' @slot path path to the \code{\link[fst]{fst}} file.
#' @slot file_txt path of the original text data file
#'
#' @import methods
#' @importFrom fst fst
#' @exportClass LoanAcquisitionDataset
#' @export
#'
setClass("LoanAcquisitionDataset", contains   = "fst_table", slots =
           list(path="character", file_txt="character"))

#' LoanAcquisitionDataset constructor
#'
#' LoanAcquisitionDataset can be constructed either by parsing a data file acq_txt
#' or else by loading a dataset for the specified Origination year OrigYr. If both arguments
#' are missing, the complete data file for all loans in all vintages is loaded.
#' @param OrigYr integer Loans Origination Year from 1999 to 2019.
#' @param acq_txt character path to data file
#'
#' @return A LoanAcquisitionDataset object
#' @importFrom fst fst write_fst
#' @export
#'
#' @examples
#' \dontrun{
#' LoanAcquisitionDataset(OrigYr=2019)
#' }
LoanAcquisitionDataset <- function(OrigYr, acq_txt) {
  # browser()
  if(missing(acq_txt)) {
    if(missing(OrigYr)) {
      Data_A_fst <- file.path(fn_llp_workdir, sprintf("Data_A.fst"))
    } else {
      OrigYr <- as.integer(OrigYr)
      stopifnot(OrigYr %in% seq.int(1999,2019))
      Data_A_fst <- file.path(fn_llp_workdir, sprintf("Data_A_%d.fst", OrigYr))
    }
    stopifnot(file.exists(Data_A_fst))
    return(new("LoanAcquisitionDataset", fst(Data_A_fst), path=Data_A_fst))
  } else {
    Data_A <- process_A(acq_txt)
    Data_A_fst <-tempfile("Data_A_", fileext = ".fst")
    write_fst(Data_A, Data_A_fst)
    return(new("LoanAcquisitionDataset", fst(Data_A_fst), path=Data_A_fst, file_txt=acq_txt))
  }

}

#' show LoanAcquisitionDataset
#'
#' show Loan Acquisitions data set
#'
#' @param object LoanAcquisitionDataset.
#'
#' @export
#'
setMethod("show", signature(object = "LoanAcquisitionDataset"), function(object) {
  # str(object, list.len=999)
  # print(asS3(object))
  # print(metadata_fst(object@path ))
  #  print(summary(object))
  callNextMethod()
})

#' @importFrom fst read_fst
setMethod("subset", signature(x = "LoanAcquisitionDataset"), function(x, subset=NULL, select=NULL, drop=FALSE, ...) {

  Data_A <- read_fst(x@path, columns = select, as.data.table = TRUE)

  i <- eval(subset, envir = Data_A)
  Data_A <- subset(Data_A, subset=i)
  return(Data_A)
})

#' aggregate LoanAcquisitionDataset.
#'
#' @param x LoanAcquisitionDataset.
#' @param xvar Timeseries variable
#' @param by.vars facets
#' @param ... not used
#'
#' @return a data.table
#' @export
#'
#' @examples
#' \dontrun{
#' LA <- LoanAcquisitionDataset()
#' aggregate(LA)
#' }
setMethod("aggregate", signature(x = "LoanAcquisitionDataset"),
          function(x, xvar=NULL, by.vars=NULL, ...) {

            cols <- c('ORIG_AMT','ORIG_RT','ORIG_DTE', 'CSCORE_B','CSCORE_C','OLTV','OCLTV','DTI','PURPOSE','OCC_STAT','MI_PCT','ORIG_CHN')
            Data_A <- read_fst(x@path, columns = cols, from = 1, to = NULL, as.data.table = TRUE)
            #  str(Data_A)
            # browser()
            aggregate.Data_A(Data_A, xvar, by.vars)
          })
canarionyc/loanroll documentation built on Sept. 7, 2020, 4:50 a.m.