From d7363cd87267ba8e09446a0dd7659cff1470af58 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 13 Apr 2016 11:28:59 -0500 Subject: [PATCH 1/3] Create package ledgerr and move existing functions there. --- ledgerr/.Rbuildignore | 2 ++ ledgerr/.gitignore | 3 +++ ledgerr/DESCRIPTION | 9 +++++++++ ledgerr/NAMESPACE | 2 ++ ledgerr/R/net.R | 18 ++++++++++++++++++ ledgerr/R/net.acc.R | 29 +++++++++++++++++++++++++++++ ledgerr/R/net.class.R | 27 +++++++++++++++++++++++++++ working.Rmd | 18 ------------------ 8 files changed, 90 insertions(+), 18 deletions(-) create mode 100644 ledgerr/.Rbuildignore create mode 100644 ledgerr/.gitignore create mode 100644 ledgerr/DESCRIPTION create mode 100644 ledgerr/NAMESPACE create mode 100644 ledgerr/R/net.R create mode 100644 ledgerr/R/net.acc.R create mode 100644 ledgerr/R/net.class.R diff --git a/ledgerr/.Rbuildignore b/ledgerr/.Rbuildignore new file mode 100644 index 0000000..91114bf --- /dev/null +++ b/ledgerr/.Rbuildignore @@ -0,0 +1,2 @@ +^.*\.Rproj$ +^\.Rproj\.user$ diff --git a/ledgerr/.gitignore b/ledgerr/.gitignore new file mode 100644 index 0000000..807ea25 --- /dev/null +++ b/ledgerr/.gitignore @@ -0,0 +1,3 @@ +.Rproj.user +.Rhistory +.RData diff --git a/ledgerr/DESCRIPTION b/ledgerr/DESCRIPTION new file mode 100644 index 0000000..e582a12 --- /dev/null +++ b/ledgerr/DESCRIPTION @@ -0,0 +1,9 @@ +Package: ledgerr +Title: R Functions For Bookkeeping (one line, title case) +Version: 0.0.0.9000 +Authors@R: person("Matt", "Burton-Kelly", email = "bedrocks@gmail.com", role = c("aut", "cre")) +Description: This package acts as a frontend for simple bookkeeping spreadsheets and provides functions for reports. +Depends: R (>= 3.2.4) +License: GNU Affero General Public License” version 3 (AGPL-3) +Encoding: UTF-8 +LazyData: true diff --git a/ledgerr/NAMESPACE b/ledgerr/NAMESPACE new file mode 100644 index 0000000..884a631 --- /dev/null +++ b/ledgerr/NAMESPACE @@ -0,0 +1,2 @@ +# Generated by roxygen2: fake comment so roxygen2 overwrites silently. +exportPattern("^[^\\.]") diff --git a/ledgerr/R/net.R b/ledgerr/R/net.R new file mode 100644 index 0000000..dee9701 --- /dev/null +++ b/ledgerr/R/net.R @@ -0,0 +1,18 @@ +net<-function(journ, + classselect="all", + accselect="all", + dates="all"){ + if("all" %in% classselect) { + classselect<-levels(journ$Class) + } + if("all" %in% accselect) { + accselect<-levels(journ$Account) + } + if("all" %in% dates) { + dates<-c(min(journ$Date),max(journ$Date)) + } + net<-sum(journ$Credit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], + na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], + na.rm=T) + return(net) +} \ No newline at end of file diff --git a/ledgerr/R/net.acc.R b/ledgerr/R/net.acc.R new file mode 100644 index 0000000..fdc5774 --- /dev/null +++ b/ledgerr/R/net.acc.R @@ -0,0 +1,29 @@ +net.acc<-function(journ, + classselect="all", + accselect="all", + dates="all", + total=F) { + # List of classes - need to do this here before passing to net() + if("all" %in% accselect) { + accselect<-unique(journ$Account) + } + # Set up data frame + net.acc.out<-data.frame(Account=character(), + Net=numeric(), + stringsAsFactors=FALSE) + # Loop through accounts, calculate net, and add to data frame + for (i in 1:length(accselect)) { + net.acc.out[i,] <- c(as.character(accselect[i]), + net(journ, + classselect=classselect, + accselect=accselect[i], + dates=dates)) + } + # Sort by account name + net.acc.out<-net.acc.out[order(net.acc.out$Account) , ] + # Add total net row + if(total) { + net.acc.out[nrow(net.acc.out)+1,]<-c("Total",net(journal)) + } + return(net.acc.out) +} \ No newline at end of file diff --git a/ledgerr/R/net.class.R b/ledgerr/R/net.class.R new file mode 100644 index 0000000..eba2bc5 --- /dev/null +++ b/ledgerr/R/net.class.R @@ -0,0 +1,27 @@ +net.class<-function(journ, + classselect="all", + accselect="all", + dates="all", + total=F) { + # List of classes + if("all" %in% classselect) { + classselect<-levels(journ$Class) + } + # Set up data frame + net.class.out<-data.frame(Class=character(), + Net=numeric(), + stringsAsFactors=FALSE) + # Loop through classes, calculate net, and add to data frame + for (i in 1:length(classselect)) { + net.class.out[i,] <- c(classselect[i], + net(journ, + classselect=classselect[i], + accselect=accselect, + dates="all")) + } + # Add total net row + if(total) { + net.class.out[nrow(net.class.out)+1,]<-c("Total",net(journal)) + } + return(net.class.out) +} \ No newline at end of file diff --git a/working.Rmd b/working.Rmd index e4c4e2c..2e54744 100644 --- a/working.Rmd +++ b/working.Rmd @@ -36,24 +36,6 @@ journal$Debit<-as.numeric(sub(",","",journal$Debit)) journal$Credit<-as.numeric(sub(",","",journal$Credit)) ## Temp function location -# TODO https://github.com/mattbk/ledgerr/issues/1 -########## net() function, takes journal, class name(s), and date range as arguments -net<-function(journ,classselect="all",accselect="all",dates="all"){ - if("all" %in% classselect) { - classselect<-levels(journ$Class) - } - if("all" %in% accselect) { - accselect<-levels(journ$Account) - } - if("all" %in% dates) { - dates<-c(min(journ$Date),max(journ$Date)) - } - net<-sum(journ$Credit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], - na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], - na.rm=T) - return(net) -} -########## ########## Net table by class net.class<-function(journ, From e22524ad56868432dee4e3a6cdb1527a8e43219f Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 13 Apr 2016 11:28:59 -0500 Subject: [PATCH 2/3] Create package ledgerr and move existing functions there. --- ledgerr/.Rbuildignore | 2 + ledgerr/.gitignore | 3 ++ ledgerr/DESCRIPTION | 9 +++++ ledgerr/NAMESPACE | 2 + ledgerr/R/net.R | 18 +++++++++ ledgerr/R/net.acc.R | 29 +++++++++++++++ ledgerr/R/net.class.R | 27 ++++++++++++++ working.Rmd | 86 ------------------------------------------- 8 files changed, 90 insertions(+), 86 deletions(-) create mode 100644 ledgerr/.Rbuildignore create mode 100644 ledgerr/.gitignore create mode 100644 ledgerr/DESCRIPTION create mode 100644 ledgerr/NAMESPACE create mode 100644 ledgerr/R/net.R create mode 100644 ledgerr/R/net.acc.R create mode 100644 ledgerr/R/net.class.R diff --git a/ledgerr/.Rbuildignore b/ledgerr/.Rbuildignore new file mode 100644 index 0000000..91114bf --- /dev/null +++ b/ledgerr/.Rbuildignore @@ -0,0 +1,2 @@ +^.*\.Rproj$ +^\.Rproj\.user$ diff --git a/ledgerr/.gitignore b/ledgerr/.gitignore new file mode 100644 index 0000000..807ea25 --- /dev/null +++ b/ledgerr/.gitignore @@ -0,0 +1,3 @@ +.Rproj.user +.Rhistory +.RData diff --git a/ledgerr/DESCRIPTION b/ledgerr/DESCRIPTION new file mode 100644 index 0000000..e582a12 --- /dev/null +++ b/ledgerr/DESCRIPTION @@ -0,0 +1,9 @@ +Package: ledgerr +Title: R Functions For Bookkeeping (one line, title case) +Version: 0.0.0.9000 +Authors@R: person("Matt", "Burton-Kelly", email = "bedrocks@gmail.com", role = c("aut", "cre")) +Description: This package acts as a frontend for simple bookkeeping spreadsheets and provides functions for reports. +Depends: R (>= 3.2.4) +License: GNU Affero General Public License” version 3 (AGPL-3) +Encoding: UTF-8 +LazyData: true diff --git a/ledgerr/NAMESPACE b/ledgerr/NAMESPACE new file mode 100644 index 0000000..884a631 --- /dev/null +++ b/ledgerr/NAMESPACE @@ -0,0 +1,2 @@ +# Generated by roxygen2: fake comment so roxygen2 overwrites silently. +exportPattern("^[^\\.]") diff --git a/ledgerr/R/net.R b/ledgerr/R/net.R new file mode 100644 index 0000000..dee9701 --- /dev/null +++ b/ledgerr/R/net.R @@ -0,0 +1,18 @@ +net<-function(journ, + classselect="all", + accselect="all", + dates="all"){ + if("all" %in% classselect) { + classselect<-levels(journ$Class) + } + if("all" %in% accselect) { + accselect<-levels(journ$Account) + } + if("all" %in% dates) { + dates<-c(min(journ$Date),max(journ$Date)) + } + net<-sum(journ$Credit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], + na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], + na.rm=T) + return(net) +} \ No newline at end of file diff --git a/ledgerr/R/net.acc.R b/ledgerr/R/net.acc.R new file mode 100644 index 0000000..fdc5774 --- /dev/null +++ b/ledgerr/R/net.acc.R @@ -0,0 +1,29 @@ +net.acc<-function(journ, + classselect="all", + accselect="all", + dates="all", + total=F) { + # List of classes - need to do this here before passing to net() + if("all" %in% accselect) { + accselect<-unique(journ$Account) + } + # Set up data frame + net.acc.out<-data.frame(Account=character(), + Net=numeric(), + stringsAsFactors=FALSE) + # Loop through accounts, calculate net, and add to data frame + for (i in 1:length(accselect)) { + net.acc.out[i,] <- c(as.character(accselect[i]), + net(journ, + classselect=classselect, + accselect=accselect[i], + dates=dates)) + } + # Sort by account name + net.acc.out<-net.acc.out[order(net.acc.out$Account) , ] + # Add total net row + if(total) { + net.acc.out[nrow(net.acc.out)+1,]<-c("Total",net(journal)) + } + return(net.acc.out) +} \ No newline at end of file diff --git a/ledgerr/R/net.class.R b/ledgerr/R/net.class.R new file mode 100644 index 0000000..eba2bc5 --- /dev/null +++ b/ledgerr/R/net.class.R @@ -0,0 +1,27 @@ +net.class<-function(journ, + classselect="all", + accselect="all", + dates="all", + total=F) { + # List of classes + if("all" %in% classselect) { + classselect<-levels(journ$Class) + } + # Set up data frame + net.class.out<-data.frame(Class=character(), + Net=numeric(), + stringsAsFactors=FALSE) + # Loop through classes, calculate net, and add to data frame + for (i in 1:length(classselect)) { + net.class.out[i,] <- c(classselect[i], + net(journ, + classselect=classselect[i], + accselect=accselect, + dates="all")) + } + # Add total net row + if(total) { + net.class.out[nrow(net.class.out)+1,]<-c("Total",net(journal)) + } + return(net.class.out) +} \ No newline at end of file diff --git a/working.Rmd b/working.Rmd index e4c4e2c..9772619 100644 --- a/working.Rmd +++ b/working.Rmd @@ -35,92 +35,6 @@ journal$Account<-as.factor(journal$Account) journal$Debit<-as.numeric(sub(",","",journal$Debit)) journal$Credit<-as.numeric(sub(",","",journal$Credit)) -## Temp function location -# TODO https://github.com/mattbk/ledgerr/issues/1 -########## net() function, takes journal, class name(s), and date range as arguments -net<-function(journ,classselect="all",accselect="all",dates="all"){ - if("all" %in% classselect) { - classselect<-levels(journ$Class) - } - if("all" %in% accselect) { - accselect<-levels(journ$Account) - } - if("all" %in% dates) { - dates<-c(min(journ$Date),max(journ$Date)) - } - net<-sum(journ$Credit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], - na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]], - na.rm=T) - return(net) -} -########## - -########## Net table by class -net.class<-function(journ, - classselect="all", - accselect="all", - dates="all", - total=F) { -# List of classes - if("all" %in% classselect) { - classselect<-levels(journ$Class) - } -# Set up data frame -net.class.out<-data.frame(Class=character(), - Net=numeric(), - stringsAsFactors=FALSE) -# Loop through classes, calculate net, and add to data frame -for (i in 1:length(classselect)) { - net.class.out[i,] <- c(classselect[i], - net(journ, - classselect=classselect[i], - accselect=accselect, - dates="all")) - } -# Add total net row -if(total) { - net.class.out[nrow(net.class.out)+1,]<-c("Total",net(journal)) - } -return(net.class.out) -} -########## - -########## Net table by account -net.acc<-function(journ, - classselect="all", - accselect="all", - dates="all", - total=F) { -# List of classes - need to do this here before passing to net() - if("all" %in% accselect) { - accselect<-unique(journ$Account) - } -# Set up data frame -net.acc.out<-data.frame(Account=character(), - Net=numeric(), - stringsAsFactors=FALSE) -# Loop through accounts, calculate net, and add to data frame -for (i in 1:length(accselect)) { - net.acc.out[i,] <- c(as.character(accselect[i]), - net(journ, - classselect=classselect, - accselect=accselect[i], - dates=dates)) -} -# Sort by account name -net.acc.out<-net.acc.out[order(net.acc.out$Account) , ] -# Add total net row -if(total) { - net.acc.out[nrow(net.acc.out)+1,]<-c("Total",net(journal)) - } -return(net.acc.out) -} -########## - - - - - # See other reports in QB and Ledger ``` \ No newline at end of file From 2f49384c1c6c883d1f5eee6397d5d6bd38788790 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 13 Apr 2016 12:33:26 -0500 Subject: [PATCH 3/3] Working package with existing functions. --- ledgerr.Rproj | 6 ++++++ ledgerr/DESCRIPTION | 11 +++++++---- ledgerr/NAMESPACE | 7 +++++-- ledgerr/R/net.R | 11 +++++++++++ ledgerr/R/net.acc.R | 11 +++++++++++ ledgerr/R/net.class.R | 11 +++++++++++ ledgerr/man/net.Rd | 25 +++++++++++++++++++++++++ ledgerr/man/net.acc.Rd | 27 +++++++++++++++++++++++++++ ledgerr/man/net.class.Rd | 27 +++++++++++++++++++++++++++ 9 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 ledgerr/man/net.Rd create mode 100644 ledgerr/man/net.acc.Rd create mode 100644 ledgerr/man/net.class.Rd diff --git a/ledgerr.Rproj b/ledgerr.Rproj index d063e8b..d6ff804 100644 --- a/ledgerr.Rproj +++ b/ledgerr.Rproj @@ -11,3 +11,9 @@ Encoding: UTF-8 RnwWeave: knitr LaTeX: pdfLaTeX + +BuildType: Package +PackageUseDevtools: Yes +PackagePath: ledgerr +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace diff --git a/ledgerr/DESCRIPTION b/ledgerr/DESCRIPTION index e582a12..2c64ae6 100644 --- a/ledgerr/DESCRIPTION +++ b/ledgerr/DESCRIPTION @@ -1,9 +1,12 @@ Package: ledgerr -Title: R Functions For Bookkeeping (one line, title case) +Title: R Functions For Bookkeeping Version: 0.0.0.9000 Authors@R: person("Matt", "Burton-Kelly", email = "bedrocks@gmail.com", role = c("aut", "cre")) -Description: This package acts as a frontend for simple bookkeeping spreadsheets and provides functions for reports. -Depends: R (>= 3.2.4) -License: GNU Affero General Public License” version 3 (AGPL-3) +Description: This package acts as a frontend for simple bookkeeping spreadsheets + and provides functions for reports. +Depends: + R (>= 3.2.4) +License: GNU Affero General Public License version 3 (AGPL-3) Encoding: UTF-8 LazyData: true +RoxygenNote: 5.0.1.9000 diff --git a/ledgerr/NAMESPACE b/ledgerr/NAMESPACE index 884a631..e6f4cb7 100644 --- a/ledgerr/NAMESPACE +++ b/ledgerr/NAMESPACE @@ -1,2 +1,5 @@ -# Generated by roxygen2: fake comment so roxygen2 overwrites silently. -exportPattern("^[^\\.]") +# Generated by roxygen2: do not edit by hand + +export(net) +export(net.acc) +export(net.class) diff --git a/ledgerr/R/net.R b/ledgerr/R/net.R index dee9701..70925e8 100644 --- a/ledgerr/R/net.R +++ b/ledgerr/R/net.R @@ -1,3 +1,14 @@ +#' Calculate net +#' +#' This function reads in your journal, subsets it according to queries, and calculates net. +#' @param journ Journal dataframe +#' @param classselect Which classes to include. c("class1","class2",...). Defaults to "all". +#' @param accselect Which accounts to include. c("class1","class2",...). Defaults to "all". +#' @param dates Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all". +#' @keywords net +#' @export +#' @examples +#' net() net<-function(journ, classselect="all", accselect="all", diff --git a/ledgerr/R/net.acc.R b/ledgerr/R/net.acc.R index fdc5774..d679607 100644 --- a/ledgerr/R/net.acc.R +++ b/ledgerr/R/net.acc.R @@ -1,3 +1,14 @@ +#' Calculate net per account and present as a table +#' +#' This function reads in your journal, subsets it according to queries, calculates net for each account, and prints a table.. +#' @param journ Journal dataframe +#' @param classselect Which classes to include. c("class1","class2",...). Defaults to "all". +#' @param accselect Which accounts to include. c("class1","class2",...). Defaults to "all". +#' @param dates Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all". +#' @keywords net account +#' @export +#' @examples +#' net.account() net.acc<-function(journ, classselect="all", accselect="all", diff --git a/ledgerr/R/net.class.R b/ledgerr/R/net.class.R index eba2bc5..11f1359 100644 --- a/ledgerr/R/net.class.R +++ b/ledgerr/R/net.class.R @@ -1,3 +1,14 @@ +#' Calculate net per class and present as a table +#' +#' This function reads in your journal, subsets it according to queries, calculates net for each class, and prints a table.. +#' @param journ Journal dataframe +#' @param classselect Which classes to include. c("class1","class2",...). Defaults to "all". +#' @param accselect Which accounts to include. c("class1","class2",...). Defaults to "all". +#' @param dates Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all". +#' @keywords net class +#' @export +#' @examples +#' net.class() net.class<-function(journ, classselect="all", accselect="all", diff --git a/ledgerr/man/net.Rd b/ledgerr/man/net.Rd new file mode 100644 index 0000000..e9a26bc --- /dev/null +++ b/ledgerr/man/net.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/net.R +\name{net} +\alias{net} +\title{Calculate net} +\usage{ +net(journ, classselect = "all", accselect = "all", dates = "all") +} +\arguments{ +\item{journ}{Journal dataframe} + +\item{classselect}{Which classes to include. c("class1","class2",...). Defaults to "all".} + +\item{accselect}{Which accounts to include. c("class1","class2",...). Defaults to "all".} + +\item{dates}{Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all".} +} +\description{ +This function reads in your journal, subsets it according to queries, and calculates net. +} +\examples{ +net() +} +\keyword{net} + diff --git a/ledgerr/man/net.acc.Rd b/ledgerr/man/net.acc.Rd new file mode 100644 index 0000000..ef9b09e --- /dev/null +++ b/ledgerr/man/net.acc.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/net.acc.R +\name{net.acc} +\alias{net.acc} +\title{Calculate net per account and present as a table} +\usage{ +net.acc(journ, classselect = "all", accselect = "all", dates = "all", + total = F) +} +\arguments{ +\item{journ}{Journal dataframe} + +\item{classselect}{Which classes to include. c("class1","class2",...). Defaults to "all".} + +\item{accselect}{Which accounts to include. c("class1","class2",...). Defaults to "all".} + +\item{dates}{Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all".} +} +\description{ +This function reads in your journal, subsets it according to queries, calculates net for each account, and prints a table.. +} +\examples{ +net.account() +} +\keyword{account} +\keyword{net} + diff --git a/ledgerr/man/net.class.Rd b/ledgerr/man/net.class.Rd new file mode 100644 index 0000000..5cacaff --- /dev/null +++ b/ledgerr/man/net.class.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/net.class.R +\name{net.class} +\alias{net.class} +\title{Calculate net per class and present as a table} +\usage{ +net.class(journ, classselect = "all", accselect = "all", dates = "all", + total = F) +} +\arguments{ +\item{journ}{Journal dataframe} + +\item{classselect}{Which classes to include. c("class1","class2",...). Defaults to "all".} + +\item{accselect}{Which accounts to include. c("class1","class2",...). Defaults to "all".} + +\item{dates}{Date range to include. c("2014-01-01","2014-12-31"). Defaults to "all".} +} +\description{ +This function reads in your journal, subsets it according to queries, calculates net for each class, and prints a table.. +} +\examples{ +net.class() +} +\keyword{class} +\keyword{net} +