From 511308b80c3ea9d3d2ecdd14497cad83519b3df0 Mon Sep 17 00:00:00 2001 From: Andrea Julca Date: Wed, 7 Dec 2016 12:54:36 -0500 Subject: [PATCH 01/32] Rename to bea.R + update to CRAN published v1.0.0 Now on https://CRAN.R-project.org/package=bea.R --- DESCRIPTION | 28 ++++++++++++++-------------- LICENSE | 13 ------------- LICENSE.note | 14 ++++++++++++++ R/bea2Tab.r | 2 +- R/beaGet.r | 4 ++-- R/beaParamVals.r | 2 +- R/beaParams.r | 2 +- R/beaSearch.r | 2 +- R/beaSets.r | 2 +- R/beaUpdateMetadata.r | 2 +- R/beaViz.r | 36 ++++++++++++++++++------------------ README.md | 32 ++++++++++++++++++++------------ beaR_Manual.pdf | Bin 323868 -> 234700 bytes 13 files changed, 74 insertions(+), 65 deletions(-) create mode 100644 LICENSE.note diff --git a/DESCRIPTION b/DESCRIPTION index 5272ef4..cd3c3c5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,14 +1,13 @@ -Package: beaR -Title: R interface to the Bureau of Economic Analysis API +Package: bea.R +Title: Bureau of Economic Analysis API Version: 1.0.0 Authors@R: c(person("Andrea", "Julca", role = c("aut", "cre"), - email = c("Andrea.Julca@gmail.com", "Andrea.Julca@bea.gov")), + email = c("Andrea.Julca@bea.gov")), person("Jeff", "Chen", role = "ctb"), person("Walt", "Kampas", role = "ctb")) Author: Andrea Julca [aut, cre], Jeff Chen [ctb], Walt Kampas [ctb] -Maintainer: Andrea Julca Depends: R (>= 3.2.1), data.table @@ -35,17 +34,18 @@ Imports: colorspace, plyr, yaml -Description: The beaR package is an R interface for the Bureau of Economic - Analysis (BEA) API that serves two core purposes - - 1. To Extract/Transform/Load data [beaGet] from the BEA API as R-friendly - formats in the user's workspace [transformation done by default in beaGet - can be modified using optional params; see, too, bea2List, bea2Tab]. - 2. To enable the search of descriptive metadata [beaSearch]. +Description: Provides an R interface for the Bureau of Economic Analysis (BEA) + API (see for + more information) that serves two core purposes - + 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly + formats in the user's work space [transformation done by default in beaGet() + can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. + 2. To enable the search of descriptive meta data [beaSearch()]. Other features of the library exist mainly as intermediate methods or are in early stages of development. - Important Note - You must have an API Key to use this library. - Register for a key at http://www.bea.gov/API/signup/index.cfm . -URL: http://www.bea.gov/API/bea_web_service_api_user_guide.htm -License: file LICENSE + Important Note - You must have an API key to use this library. + Register for a key at . +URL: https://github.com/us-bea/beaR +License: CC0 LazyData: no RoxygenNote: 5.0.1 diff --git a/LICENSE b/LICENSE index 99d7835..70755e3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,16 +1,3 @@ ---------------------------------------------------------------------------- - -Software code created by U.S. Government employees is not subject to -copyright in the United States (17 U.S.C. §105). The United States/ -Department of Commerce reserve all rights to seek and obtain copyright -protection in countries other than the United States for Software authored -in its entirety by the Department of Commerce. To this end, the Department -of Commerce hereby grants to Recipient a royalty-free, nonexclusive license -to use, copy, and create derivative works of the Software outside of the -United States. - ---------------------------------------------------------------------------- - CC0 1.0 Universal diff --git a/LICENSE.note b/LICENSE.note new file mode 100644 index 0000000..244ede8 --- /dev/null +++ b/LICENSE.note @@ -0,0 +1,14 @@ + +--------------------------------------------------------------------------- + +Software code created by U.S. Government employees is not subject to +copyright in the United States (17 U.S.C. §105). The United States/ +Department of Commerce reserve all rights to seek and obtain copyright +protection in countries other than the United States for Software authored +in its entirety by the Department of Commerce. To this end, the Department +of Commerce hereby grants to Recipient a royalty-free, nonexclusive license +to freely use, copy, distribute, and create derivative works of the Software +outside of the United States. The CC0 1.0 Universal License should be taken +to apply to this work inside and outside of the United States. + +--------------------------------------------------------------------------- \ No newline at end of file diff --git a/R/bea2Tab.r b/R/bea2Tab.r index 971956d..cad1784 100644 --- a/R/bea2Tab.r +++ b/R/bea2Tab.r @@ -20,7 +20,7 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { requireNamespace('data.table', quietly = TRUE) if('response' %in% class(beaPayload)){ - beaResponse <- beaR::bea2List(beaPayload) + beaResponse <- bea.R::bea2List(beaPayload) } else { beaResponse <- beaPayload } diff --git a/R/beaGet.r b/R/beaGet.r index 8c54796..fcce0be 100644 --- a/R/beaGet.r +++ b/R/beaGet.r @@ -84,13 +84,13 @@ beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=T if (asTable) { userWide <- asWide userTabStyle <- iTableStyle - beaResults <- beaR::bea2Tab(beaPayload, asWide = userWide, iTableStyle = userTabStyle) + beaResults <- bea.R::bea2Tab(beaPayload, asWide = userWide, iTableStyle = userTabStyle) return(beaResults) } else { if(asList) { metaMethod <- isMeta - beaResponse <- beaR::bea2List(beaPayload, isMeta = metaMethod) + beaResponse <- bea.R::bea2List(beaPayload, isMeta = metaMethod) return(beaResponse) } else { diff --git a/R/beaParamVals.r b/R/beaParamVals.r index 7c286fc..07f3fa3 100644 --- a/R/beaParamVals.r +++ b/R/beaParamVals.r @@ -17,7 +17,7 @@ beaParamVals <- function(beaKey, setName, paramName) { 'ParameterName'=paramName, 'ResultFormat' = 'json' ) - beaResponse <- beaR::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) return(beaResponse) } \ No newline at end of file diff --git a/R/beaParams.r b/R/beaParams.r index f178177..b85ac7b 100644 --- a/R/beaParams.r +++ b/R/beaParams.r @@ -16,7 +16,7 @@ beaParams <- function(beaKey, setName) { 'ResultFormat' = 'json' ) - beaResponse <- beaR::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) return(beaResponse) } diff --git a/R/beaSearch.r b/R/beaSearch.r index af5c095..842aba2 100644 --- a/R/beaSearch.r +++ b/R/beaSearch.r @@ -101,7 +101,7 @@ is not recommended, as the key is needed to update locally stored metadata.')} 'ResultFormat' = 'json' ) #Get metadata response with timestamps we need to check for updates as list - beaMetaParams <- beaR::beaGet(beaMetaTimeSpec, asList = TRUE, asTable = FALSE, isMeta = TRUE) + beaMetaParams <- bea.R::beaGet(beaMetaTimeSpec, asList = TRUE, asTable = FALSE, isMeta = TRUE) beaMetaInfo <- data.table::as.data.table(beaMetaParams$ParamValue) diff --git a/R/beaSets.r b/R/beaSets.r index 1d9f310..8ed1026 100644 --- a/R/beaSets.r +++ b/R/beaSets.r @@ -16,7 +16,7 @@ beaSets <- function(beaKey) { ) #Set list using beaGet - beaResponse <- beaR::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) return(beaResponse) } \ No newline at end of file diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 223ecfb..5681737 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -50,7 +50,7 @@ beaUpdateMetadata <- function(datasetList, beaKey){ ) #Get as httr response - beaResponse <- beaR::beaGet(beaMetaSpecs, asList = FALSE, asTable = FALSE, isMeta = TRUE) + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = FALSE, asTable = FALSE, isMeta = TRUE) #Check to ensure it is httr response if(class(beaResponse) != 'response'){ diff --git a/R/beaViz.r b/R/beaViz.r index e631c6c..5bcb067 100644 --- a/R/beaViz.r +++ b/R/beaViz.r @@ -48,7 +48,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { # and, for now, we must transform back to LONG format for beaViz. Change this later. if(!is.null(attributes(beaPayload)$is.wide)){ if(attributes(beaPayload)$is.wide){ - beaTab <- beaR::bea2Tab(beaPayload, asWide = FALSE) + beaTab <- bea.R::bea2Tab(beaPayload, asWide = FALSE) } else { beaTab <- beaPayload } @@ -59,7 +59,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { 'response' %in% class(beaPayload) || 'list' %in% class(beaPayload) ), - beaR::bea2Tab(beaPayload, asWide = FALSE), + bea.R::bea2Tab(beaPayload, asWide = FALSE), beaPayload ) } @@ -108,7 +108,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { message('Note: If you are using RStudio, you will need to "Open in Browser" to view graphs/table.') message('') message('****You can safely ignore the following errors:****') - #beaTab <- beaR::bea2Tab(beaList) + #beaTab <- bea.R::bea2Tab(beaList) #Get info about the dataset and request thisDatasetLoc <- grep( @@ -212,7 +212,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { thisTabID <- attributes(beaTab)$params$ParameterValue[thisTabIDLoc] - nationalIndex <- beaR::beaSearch(' ', beaKey = thisUserID)[Account == 'National'] + nationalIndex <- bea.R::beaSearch(' ', beaKey = thisUserID)[Account == 'National'] data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) #/IF NATIONAL @@ -273,7 +273,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { #Get a list of possible datasets - beaAllSets <- beaR::beaSets(thisUserID)$Dataset + beaAllSets <- bea.R::beaSets(thisUserID)$Dataset #Create list of names for select box # setList <- as.list( @@ -423,7 +423,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { #output$userSetParams <- shiny::reactive({ userSetParams <- shiny::reactive({ - theseParams <- beaR::beaParams(thisUserID, userSelectedSet())$Parameter + theseParams <- bea.R::beaParams(thisUserID, userSelectedSet())$Parameter #return(str(theseParams)) return(theseParams) @@ -455,7 +455,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -520,7 +520,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -586,7 +586,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -652,7 +652,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -719,7 +719,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -785,7 +785,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -850,7 +850,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -914,7 +914,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -979,7 +979,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return() } else { - allParamSet <- beaR::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue + allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue if(allValCheck){ allParamDesc <- as.list( c(theseParams$AllValue[1], allParamSet[[1]]) @@ -1398,7 +1398,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { output$vistab <- googleVis::renderGvis({ preTab <- try(as.data.frame( - beaR::bea2Tab(beaTab, asWide = TRUE)[ + bea.R::bea2Tab(beaTab, asWide = TRUE)[ order( as.numeric( LineNumber @@ -1509,7 +1509,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { return(apiAttr); }) - specStr <- paste0("beaData <- beaR::beaGet( \n list(\n 'UserID' = '", thisUserID, "', \n 'Method' = 'GetData', \n 'DatasetName' = '", selectedSet,"'", + specStr <- paste0("beaData <- bea.R::beaGet( \n list(\n 'UserID' = '", thisUserID, "', \n 'Method' = 'GetData', \n 'DatasetName' = '", selectedSet,"'", ifelse( !is.null(userDefPrms[1]), ifelse(!is.na(userDefPrms[1]), @@ -1643,7 +1643,7 @@ beaViz <- function(beaPayload = NULL, beaKey = NULL) { input$apiParam9, '.csv', sep='') }, content = function(file) { - utils::write.csv(beaR::bea2Tab(beaTab, asWide = TRUE)[ + utils::write.csv(bea.R::bea2Tab(beaTab, asWide = TRUE)[ order( as.numeric( LineNumber diff --git a/README.md b/README.md index 7adaa0d..5b418c1 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,18 @@ +## Note: Library has been renamed from "beaR" to "bea.R" + # Instructions Thank you for taking the time to test BEA's R library. The library is intended to make it easier to retrieve and work with BEA data. After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). +## To Install and Load the stable, published version of the bea.R Library (recommended) + + ```r + install.packages('bea.R') + library(bea.R) + ``` -## To Install and Load the beaR Library +## To Install and Load the development version of the bea.R Library (not recommended) **Please take the following steps:** @@ -19,18 +27,18 @@ After you test the library, please send any feedback and, if possible, code that library(devtools) ``` -3. Install the beaR library from the BEA GitHub repo: +3. Install the bea.R library from the BEA GitHub repo: ```r httr::set_config( config( ssl_verifypeer = 0L )) #zero L - devtools::install_github('us-bea/beaR') + devtools::install_github('us-bea/bea.R') ``` -4. Load beaR using the library function. +4. Load bea.R using the library function. ```r - library(beaR) + library(bea.R) ``` -You are now ready to use beaR! +You are now ready to use bea.R! ## To Get Started You must first [register for an API key](http://www.bea.gov/API/signup/index.cfm) from BEA by providing your name and email address. The key will be emailed to you. @@ -43,7 +51,7 @@ beaKey <- 'YOUR 36-DIGIT API KEY' ## To Use beaSearch and beaGet -Currently, the beaR library offers two main methods: beaSearch and beaGet. +Currently, the bea.R library offers two main methods: beaSearch and beaGet. ### beaSearch This method allows you to search for BEA data by keyword. For example, to find all datasets in which the term "personal consumption" appears, use the following: @@ -63,7 +71,7 @@ The contents of this function are automatically updated using a new metadata com If you do not wish to automatically update the metadata (e.g., you have conducted a study using the search function), simply searching for the term without also passing your key to the function will do a search only using your locally stored version. -However, *this approach is not advised.* If you would like to retain metadata for posterity, please copy it from the "beaR/data" area of your .libPaths() directory to local storage elsewhere on your machine; this will help prevent accidental overwrite, and will not interfere with the "freshness" of your searches. +However, *this approach is not advised.* If you would like to retain metadata for posterity, please copy it from the "bea.R/data" area of your .libPaths() directory to local storage elsewhere on your machine; this will help prevent accidental overwrite, and will not interfere with the "freshness" of your searches. ### beaGet @@ -103,7 +111,7 @@ By default, asWide = TRUE and iTableStyle = TRUE, as this format is the most sim ## To Use beaViz -The beaR library also includes an experimental method to create a visual dashboard. This method is still under development. Currently, it is designed to work with the standard R Console interface—not with other interfaces such as R Studio. (However, if you want to experiment with beaViz in R Studio, click on "Open in Browser" at the top of pop-up box after you execute the beaViz method. +The bea.R library also includes an experimental method to create a visual dashboard. This method is still under development. Currently, it is designed to work with the standard R Console interface—not with other interfaces such as R Studio. (However, if you want to experiment with beaViz in R Studio, click on "Open in Browser" at the top of pop-up box after you execute the beaViz method. The beaViz method allows you to pass a variable generated from beaGet to create a dashboard. To use the "beaPayload" example given above, enter the following command: @@ -114,8 +122,8 @@ Please note that beaViz is currently only available for use with the NIPA and NI BEA is open to any thoughts you may have about visually representing BEA data. -# About beaR -beaR is a library for use with BEA’s API and the R programming language, version 3.2.1 or higher. +# About bea.R +bea.R is a library for use with BEA’s API and the R programming language, version 3.2.1 or higher. This library serves two core purposes: @@ -129,6 +137,6 @@ Other features of the library exist mainly as intermediate methods or are in ear # Disclaimer The United States Department of Commerce (DOC) GitHub project code is provided on an ‘as is’ basis and the user assumes responsibility for its use. DOC has relinquished control of the information and no longer has responsibility to protect the integrity, confidentiality, or availability of the information. Any claims against the Department of Commerce stemming from the use of its GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government. -Use of this library will result in data being stored on users' local machines. Specifically, local copies of BEA API metadata will be stored and automatically updated in the .libPaths() "/beaR/data" directory in order to improve performance of beaSearch. +Use of this library will result in data being stored on users' local machines. Specifically, local copies of BEA API metadata will be stored and automatically updated in the .libPaths() "/bea.R/data" directory in order to improve performance of beaSearch. diff --git a/beaR_Manual.pdf b/beaR_Manual.pdf index 8951f3ef93de617178eece95e1708806e0c96171..4cc55b3c3eb89453d667ce26a1072e346882da53 100644 GIT binary patch delta 89499 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%0AP5X)4g=T#LA>>eVE_{VOuvGGNHNw^MgXih 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 Date: Wed, 7 Dec 2016 13:02:30 -0500 Subject: [PATCH 02/32] Add files via upload From 7947eb4cd979f2fbd25d30a3003344bc37022395 Mon Sep 17 00:00:00 2001 From: Andrea Julca Date: Wed, 25 Jan 2017 18:23:41 -0500 Subject: [PATCH 03/32] Bug fix - bea2Tab + beaUpdateMetadata * bea2Tab now reshapes tables based on "Year" as well as "TimePeriod" (prioritizes "TimePeriod" if both are present), fixing issue with reshaping several industry and international datasets * Silence metadata file update --- DESCRIPTION | 2 +- R/bea2Tab.r | 28 ++++++++++++++++++++-------- R/beaUpdateMetadata.r | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index cd3c3c5..ca53292 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: bea.R Title: Bureau of Economic Analysis API -Version: 1.0.0 +Version: 1.0.1 Authors@R: c(person("Andrea", "Julca", role = c("aut", "cre"), email = c("Andrea.Julca@bea.gov")), person("Jeff", "Chen", role = "ctb"), diff --git a/R/bea2Tab.r b/R/bea2Tab.r index cad1784..effe604 100644 --- a/R/bea2Tab.r +++ b/R/bea2Tab.r @@ -34,10 +34,18 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { DataValue <- NULL TimePeriod <- NULL + Year <- NULL LineNumber <- NULL beaResults <- data.table::as.data.table(beaResponse) attributes(beaResults)$is.wide <- FALSE - + + #Some datasets use "Year" while others use "TimePeriod"; you must remove both during reshape to wide + TimeIntersect <- intersect(attributes(beaResponse)$detail$Dimensions$Name, c('TimePeriod', 'Year')) + if(length(TimeIntersect) > 1){ + TimeColName <- 'TimePeriod' + } else { + TimeColName <- TimeIntersect + } #Convert wide matrix to long #(less common as data comes as long, but needed for beaViz) if('data.frame' %in% class(beaPayload)){ @@ -66,13 +74,17 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { beaTab, varying = dateColNames, v.names = 'DataValue', - timevar = 'TimePeriod', + timevar = TimeColName, times = dateVector, direction = 'long')[, id:=NULL ] ) + if(length(TimeIntersect) > 1){ + suppressWarnings(beaResults[, Year := substr(TimePeriod, 1, 4)]) + } + attributes(beaResults)$is.wide <- FALSE } } @@ -82,9 +94,9 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { !is.null(attributes(beaResponse)$detail) ){ beaTab <- beaResults - data.table::setkey(beaTab, key = TimePeriod) + eval(parse(text = paste0('data.table::setkey(beaTab, key = ', TimeColName, ')'))) noDV <- attributes(beaTab)$names != 'DataValue' - noTS <- attributes(beaTab)$names != 'TimePeriod' + noTS <- attributes(beaTab)$names != TimeIntersect noNotes <- attributes(beaTab)$names != 'NoteRef' #A weird fix to push NA values down to bottom for reshaping @@ -104,7 +116,7 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { attributes(beaTab)$names[noDV & noTS & noNotes], collapse='+' ), - ' ~ variable + TimePeriod)' + ' ~ variable + ', TimeColName, ')' ) ) ) @@ -157,13 +169,13 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { colnames(beaNumMatrix) <- beaColHeaders beaResults <- data.table(beaNumMatrix) - beaResults[, TimePeriod := gsub('DataValue_', + eval(parse(text = paste0("beaResults[, ", TimeColName, " := gsub('DataValue_', '', attributes(beaTrans)$names[ grepl('DataValue_', attributes(beaTrans)$names, fixed = T) ], fixed = TRUE - )] - data.table::setkey(beaResults, key = TimePeriod) + )]; + data.table::setkey(beaResults, key = ", TimeColName, ");"))) } } diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 5681737..08dbb3c 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -59,7 +59,7 @@ beaUpdateMetadata <- function(datasetList, beaKey){ } lapply(datasetList, function(outdat){ - try(file.remove(paste0(beaMetadataStore,'/', outdat, '.RData')), silent = TRUE) + try(suppressWarnings(file.remove(paste0(beaMetadataStore,'/', outdat, '.RData'))), silent = TRUE) }) From d3df5ffa7b23212c2265a53510d65c3e5c1fed75 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Thu, 4 May 2017 17:57:42 -0400 Subject: [PATCH 04/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b418c1..9d174df 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Note: Library has been renamed from "beaR" to "bea.R" +## Note: The RegionalIncome and RegionalProduct data sets will replace RegionalData at the end of May 2017. The "RegionalData" dataset will be discontinued at that time, and the documentation will be updated accordingly. # Instructions From e110882055801dc99d8e714ce0604327d0450b62 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Thu, 4 May 2017 17:58:19 -0400 Subject: [PATCH 05/32] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 9d174df..3a50a61 100644 --- a/README.md +++ b/README.md @@ -138,5 +138,3 @@ Other features of the library exist mainly as intermediate methods or are in ear The United States Department of Commerce (DOC) GitHub project code is provided on an ‘as is’ basis and the user assumes responsibility for its use. DOC has relinquished control of the information and no longer has responsibility to protect the integrity, confidentiality, or availability of the information. Any claims against the Department of Commerce stemming from the use of its GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government. Use of this library will result in data being stored on users' local machines. Specifically, local copies of BEA API metadata will be stored and automatically updated in the .libPaths() "/bea.R/data" directory in order to improve performance of beaSearch. - - From c91b4e1722c995b8c6971ebae7b2501f2056d05e Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 12 Jul 2017 17:55:18 -0400 Subject: [PATCH 06/32] Fixed beaSearch Fixes to beaSearch function: - Drop obsolete RegionalData set - Handle regional and national separately --- Warning if account area search index missing --- Return results from one or the other even if both not found --- DESCRIPTION | 6 +- R/beaSearch.r | 414 +++++++++++++++++++++------------------ R/beaUpdateMetadata.r | 43 ++-- man/bea2List.Rd | 1 - man/bea2Tab.Rd | 1 - man/beaGet.Rd | 1 - man/beaParamVals.Rd | 1 - man/beaParams.Rd | 1 - man/beaSearch.Rd | 3 +- man/beaSets.Rd | 1 - man/beaUpdateMetadata.Rd | 1 - man/beaViz.Rd | 1 - 12 files changed, 254 insertions(+), 220 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index ca53292..5966420 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: bea.R Title: Bureau of Economic Analysis API -Version: 1.0.1 +Version: 1.0.2 Authors@R: c(person("Andrea", "Julca", role = c("aut", "cre"), email = c("Andrea.Julca@bea.gov")), person("Jeff", "Chen", role = "ctb"), @@ -34,7 +34,7 @@ Imports: colorspace, plyr, yaml -Description: Provides an R interface for the Bureau of Economic Analysis (BEA) +Description: Provides an R interface for the Bureau of Economic Analysis (BEA) API (see for more information) that serves two core purposes - 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly @@ -48,4 +48,4 @@ Description: Provides an R interface for the Bureau of Economic Analysis (BEA) URL: https://github.com/us-bea/beaR License: CC0 LazyData: no -RoxygenNote: 5.0.1 +RoxygenNote: 6.0.1 diff --git a/R/beaSearch.r b/R/beaSearch.r index 842aba2..10c69ff 100644 --- a/R/beaSearch.r +++ b/R/beaSearch.r @@ -4,7 +4,7 @@ #' @param beaKey Character string representation of user API key. Necessary for first time use and updates; recommended for anything beyond one-off searches from the console. #' @param asHtml Option to return results as DT markup, viewable in browser. Allows search WITHIN YOUR ALREADY-FILTERED RESULTS ONLY. Requires package 'DT' to be installed. #' @keywords search -#' @description Searches indexed dataset table name, label, and series codes. CAUTION: Currently only works with NATIONAL datasets (NIPA, NIUnderlyingDetail), temporarily excluding FixedAssets, and REGIONAL datasets (RegionalData, RegionalProduct, RegionalIncome) +#' @description Searches indexed dataset table name, label, and series codes. CAUTION: Currently only works with NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets), temporarily excluding FixedAssets, and REGIONAL datasets (RegionalProduct, RegionalIncome) #' @return An object of class 'data.table' with information about all indexed sets in which the search term was found. #' @import data.table #' @importFrom DT datatable @@ -36,9 +36,9 @@ is not recommended, as the key is needed to update locally stored metadata.')} '.' <- NULL 'apiCall' <- NULL 'nipaIndex' <- NULL - 'fixaIndex' <- NULL 'niudIndex' <- NULL - 'rdatIndex' <- NULL + 'fixaIndex' <- NULL +# 'rdatIndex' <- NULL 'rprdIndex' <- NULL 'rincIndex' <- NULL 'JSONUpdateDate' <- NULL @@ -63,12 +63,12 @@ is not recommended, as the key is needed to update locally stored metadata.')} ] data.table::setkey(beaMetaMtime, key = Dataset) - #Temporarily remove FixedAssets for V1 + #Add FixedAssets in future, but regionaldata has been merged into regionalproduct and regionalincome on the API beaKnownMetaSets <- list( 'nipa', 'niunderlyingdetail', -# 'fixedassets', - 'regionaldata', + 'fixedassets', +# 'regionaldata', 'regionalproduct', 'regionalincome' ) @@ -154,206 +154,229 @@ is not recommended, as the key is needed to update locally stored metadata.')} beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); -#Temporarily remove FixedAssets from V1 + missingNat <- FALSE; + missingReg <- FALSE; + +#Remove RegionalData, but add FixedAssets later if( -# length(grep('FixedAssets', beaMetaFiles, fixed = TRUE)) == 0 | + length(grep('FixedAssets', beaMetaFiles, fixed = TRUE)) == 0 | length(grep('NIPA', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('NIUnderlyingDetail', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('RegionalData', beaMetaFiles, fixed = TRUE)) == 0 | + length(grep('NIUnderlyingDetail', beaMetaFiles, fixed = TRUE)) == 0 + ){ + warning(paste0('National metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching regional metadata only.')) + missingNat <- TRUE; + } + + + if( +# length(grep('RegionalData', beaMetaFiles, fixed = TRUE)) == 0 | length(grep('RegionalProduct', beaMetaFiles, fixed = TRUE)) == 0 | length(grep('RegionalIncome', beaMetaFiles, fixed = TRUE)) == 0 ){ - warning(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) - return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) + warning(paste0('Regional metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching national metadata only.')) + missingReg <- TRUE; +# return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) + } + + if(missingNat && missingReg){ + message(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) + return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) } else { -#Temporarily remove FixedAssets from V1 +#Remove RegionalData permanently, but add FixedAssets later try({ -# load(paste0(beaMetadataStore, '/FixedAssets.RData')) - load(paste0(beaMetadataStore, '/NIPA.RData')) - load(paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) - load(paste0(beaMetadataStore, '/RegionalData.RData')) - load(paste0(beaMetadataStore, '/RegionalProduct.RData')) - load(paste0(beaMetadataStore, '/RegionalIncome.RData')) - + if(!missingNat){ + load(paste0(beaMetadataStore, '/FixedAssets.RData')) + load(paste0(beaMetadataStore, '/NIPA.RData')) + load(paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) + #Remove RegionalData, add FixedAssets later (fixaIndex) + nationalIndex <- rbindlist(list(nipaIndex, niudIndex, fixaIndex), use.names = TRUE, fill=F) + nationalIndex[, Account := 'National'] + data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) + + #Search national economic accounts for term + nPerfectMatch <- nationalIndex[ + grep( + tolower(searchTerm), + tolower( + paste( + LineDescription, + TableName, + SeriesCode, + DatasetName + ) + ), fixed=TRUE + ) + ] - #Temporarily remove FixedAssets from V1 -# nationalIndex <- rbindlist(list(nipaIndex, niudIndex, fixaIndex), use.names = TRUE, fill=F) - nationalIndex <- rbindlist(list(nipaIndex, niudIndex), use.names = TRUE, fill=F) - nationalIndex[, Account := 'National'] - data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) + # nPerfectMatch[ , + # Parameter := NA + # ] + # nPerfectMatch[ , + # Key := NA + # ] + + nPerfectMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', 'TableID' = '", + TableID, + "', ...))" + ) + ] + - regionalIndex <- rbindlist(list(rdatIndex, rprdIndex, rincIndex), use.names = TRUE, fill=F) - try(regionalIndex[, Account := 'Regional']) - data.table::setkey(regionalIndex, key = DatasetName, Parameter, Key) - - - #Search national economic accounts for term - nPerfectMatch <- nationalIndex[ - grep( - tolower(searchTerm), - tolower( + nReasonableMatch <- nationalIndex[ + grep( + searchTerm, paste( LineDescription, TableName, SeriesCode, DatasetName + ), ignore.case=TRUE + ) + ] + + # nReasonableMatch[ , + # Parameter := NA + # ] + # nReasonableMatch[ , + # Key := NA + # ] + + nReasonableMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', 'TableID' = '", + TableID, + "', ...))" ) - ), fixed=TRUE - ) - ] - - # nPerfectMatch[ , - # Parameter := NA - # ] - # nPerfectMatch[ , - # Key := NA - # ] + ] + - nPerfectMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', 'TableID' = '", - TableID, - "', ...))" - ) - ] - - nReasonableMatch <- nationalIndex[ - grep( - searchTerm, - paste( - LineDescription, - TableName, - SeriesCode, - DatasetName - ), ignore.case=TRUE - ) - ] - - # nReasonableMatch[ , - # Parameter := NA - # ] - # nReasonableMatch[ , - # Key := NA - # ] + + + + } + + if(!missingReg){ + load(paste0(beaMetadataStore, '/RegionalProduct.RData')) + load(paste0(beaMetadataStore, '/RegionalIncome.RData')) + # load(paste0(beaMetadataStore, '/RegionalData.RData')) + + #Removed rdatIndex, which was used for RegionalData + regionalIndex <- rbindlist(list(rprdIndex, rincIndex), use.names = TRUE, fill=F) + try(regionalIndex[, Account := 'Regional']) + data.table::setkey(regionalIndex, key = DatasetName, Parameter, Key) - nReasonableMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', 'TableID' = '", - TableID, - "', ...))" + + #Search regional accounts for the term + rPerfectMatch <- regionalIndex[ + grep( + tolower(searchTerm), + tolower( + paste( + Desc, + Key, + DatasetName + ) + ), fixed=TRUE ) - ] + ] - - #Search regional accounts for the term - rPerfectMatch <- regionalIndex[ - grep( - tolower(searchTerm), - tolower( - paste( - Desc, + # rPerfectMatch[ , + # TableID := NA + # ] + # rPerfectMatch[ , + # LineNumber := NA + # ] + # rPerfectMatch[ , + # SeriesCode := NA + # ] + # rPerfectMatch[ , + # LineDescription := NA + # ] + # rPerfectMatch[ , + # tier := NA + # ] + # rPerfectMatch[ , + # rootTabLine := NA + # ] + + + rPerfectMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', '", + Parameter, + "' = '", Key, - DatasetName + "', ...))" ) - ), fixed=TRUE - ) - ] - - # rPerfectMatch[ , - # TableID := NA - # ] - # rPerfectMatch[ , - # LineNumber := NA - # ] - # rPerfectMatch[ , - # SeriesCode := NA - # ] - # rPerfectMatch[ , - # LineDescription := NA - # ] - # rPerfectMatch[ , - # tier := NA - # ] - # rPerfectMatch[ , - # rootTabLine := NA - # ] - + ] - rPerfectMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', '", - Parameter, - "' = '", - Key, - "', ...))" - ) - ] - - - rReasonableMatch <- regionalIndex[ - grep( - searchTerm, - paste( - Desc, - Key, - DatasetName - ), ignore.case=TRUE - ) - ] - - # rReasonableMatch[ , - # TableID := NA - # ] - # rReasonableMatch[ , - # LineNumber := NA - # ] - # rReasonableMatch[ , - # SeriesCode := NA - # ] - # rReasonableMatch[ , - # LineDescription := NA - # ] - # rReasonableMatch[ , - # tier := NA - # ] - # rReasonableMatch[ , - # rootTabLine := NA - # ] - - rReasonableMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', '", - Parameter, - "' = '", - Key, - "', ...))" + + rReasonableMatch <- regionalIndex[ + grep( + searchTerm, + paste( + Desc, + Key, + DatasetName + ), ignore.case=TRUE ) - ] + ] + # rReasonableMatch[ , + # TableID := NA + # ] + # rReasonableMatch[ , + # LineNumber := NA + # ] + # rReasonableMatch[ , + # SeriesCode := NA + # ] + # rReasonableMatch[ , + # LineDescription := NA + # ] + # rReasonableMatch[ , + # tier := NA + # ] + # rReasonableMatch[ , + # rootTabLine := NA + # ] - if(requireNamespace('DT', quietly = TRUE) && asHtml == TRUE){ - requireNamespace('DT', quietly = TRUE) - searchMatch <- DT::datatable(unique( + rReasonableMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', '", + Parameter, + "' = '", + Key, + "', ...))" + ) + ] + } + + #TODO: figure out how to sort list by var name s.t. it concatenates lazily instead of this if-then stuff + if(!(missingNat) && !(missingReg)){ + searchMatch <- unique( rbindlist( list( - # nPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription)], - # rPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription)], - # nReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription)], - # rReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription)] + # nPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # rPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # nReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # rReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)] nPerfectMatch, rPerfectMatch, nReasonableMatch, @@ -362,22 +385,14 @@ is not recommended, as the key is needed to update locally stored metadata.')} use.names = TRUE, fill = TRUE ) - )) + ) } - else{ - if (asHtml == TRUE){ - message('Note: Returning as data.table. You must have package DT installed to return browser-viewable table.') - } + + if(missingNat && !(missingReg)){ searchMatch <- unique( rbindlist( list( - # nPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # rPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # nReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # rReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)] - nPerfectMatch, rPerfectMatch, - nReasonableMatch, rReasonableMatch ), use.names = TRUE, @@ -385,6 +400,29 @@ is not recommended, as the key is needed to update locally stored metadata.')} ) ) } + + if(!(missingNat) && missingReg){ + searchMatch <- unique( + rbindlist( + list( + nPerfectMatch, + nReasonableMatch + ), + use.names = TRUE, + fill = TRUE + ) + ) + } + + if(requireNamespace('DT', quietly = TRUE) && asHtml == TRUE){ + requireNamespace('DT', quietly = TRUE) + searchMatch <- DT::datatable(searchMatch) + } + else{ + if (asHtml == TRUE){ + message('Note: Returning as data.table. You must have package DT installed to return browser-viewable table.') + } + } return(searchMatch) }) } diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 08dbb3c..8d5877e 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -33,7 +33,8 @@ beaUpdateMetadata <- function(datasetList, beaKey){ 'Parameter' <- NULL 'ParamValue' <- NULL - #datasetList <- list('nipa','niunderlyingdetail','fixedassets','regionaldata','regionalproduct','regionalincome') + #datasetList <- list('nipa','niunderlyingdetail','fixedassets','regionalproduct','regionalincome') + #update as of 2017-07-12: 'regionaldata' dataset removed from API, merged into regionalproduct and regionalincome requireNamespace('data.table', quietly = TRUE) requireNamespace('httr', quietly = TRUE) @@ -184,22 +185,26 @@ beaUpdateMetadata <- function(datasetList, beaKey){ #Regional data: Treated differently from National data #Set "RegionalData" - if('regionaldata' %in% tolower(datasetList)){try({ - - rdatMDU <- metasetInfo[tolower(Datasetname) == 'regionaldata', MetaDataUpdated] - rdatParam <- metaList$BEAAPI$Datasets$Parameter[[grep('regionaldata', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] - #rbindlist(rdatParam[[1]])[ParamValue != 'NULL'] - rdatKeys <- as.data.table(rdatParam$Keycode$ParamValue[[1]]) - rdatKeys[, Parameter := 'Keycode'] - rdatFips <- as.data.table(rdatParam$GeoFIPS$ParamValue[[2]]) - rdatFips[, Parameter := 'GeoFIPS'] - - rdatIndex <- rbindlist(list(rdatKeys, rdatFips), use.names = TRUE) - rdatIndex[, DatasetName := 'RegionalData'] - rdatIndex[, MetaDataUpdated := rdatMDU] - - save(rdatIndex, file=paste0(beaMetadataStore, '/RegionalData.RData')) - })} + if('regionaldata' %in% tolower(datasetList)){ + message('The RegionalData dataset has been removed from the API; please use RegionalIncome and RegionalProduct instead.'); + return('The RegionalData dataset has been removed from the API; please use RegionalIncome and RegionalProduct instead.'); +# try({ +# +# rdatMDU <- metasetInfo[tolower(Datasetname) == 'regionaldata', MetaDataUpdated] +# rdatParam <- metaList$BEAAPI$Datasets$Parameter[[grep('regionaldata', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] +# #rbindlist(rdatParam[[1]])[ParamValue != 'NULL'] +# rdatKeys <- as.data.table(rdatParam$Keycode$ParamValue[[1]]) +# rdatKeys[, Parameter := 'Keycode'] +# rdatFips <- as.data.table(rdatParam$GeoFIPS$ParamValue[[2]]) +# rdatFips[, Parameter := 'GeoFIPS'] +# +# rdatIndex <- rbindlist(list(rdatKeys, rdatFips), use.names = TRUE) +# rdatIndex[, DatasetName := 'RegionalData'] +# rdatIndex[, MetaDataUpdated := rdatMDU] +# +# save(rdatIndex, file=paste0(beaMetadataStore, '/RegionalData.RData')) +# }) + } #Dataset "RegionalProduct" if('regionalproduct' %in% tolower(datasetList)){try({ @@ -219,7 +224,7 @@ beaUpdateMetadata <- function(datasetList, beaKey){ rprdIndex[, MetaDataUpdated := rprdMDU] save(rprdIndex, file=paste0(beaMetadataStore, '/RegionalProduct.RData')) - })} + }, silent = TRUE)} #Dataset "RegionalIncome" if('regionalincome' %in% tolower(datasetList)){try({ @@ -239,7 +244,7 @@ beaUpdateMetadata <- function(datasetList, beaKey){ rincIndex[, MetaDataUpdated := rincMDU] save(rincIndex, file=paste0(beaMetadataStore, '/RegionalIncome.RData')) - })} + }, silent = TRUE)} # if(length(datasetList) > length(metasetInfo[, Datasetname])){ # staleList <- datasetList[ diff --git a/man/bea2List.Rd b/man/bea2List.Rd index 5943efb..6b6b2df 100644 --- a/man/bea2List.Rd +++ b/man/bea2List.Rd @@ -27,4 +27,3 @@ userSpecList <- list('UserID' = 'yourKey' , resp <- beaGet(userSpecList, asTable = FALSE) BL <- bea2List(resp) } - diff --git a/man/bea2Tab.Rd b/man/bea2Tab.Rd index 2a48385..ced6eaa 100644 --- a/man/bea2Tab.Rd +++ b/man/bea2Tab.Rd @@ -29,4 +29,3 @@ userSpecList <- list('UserID' = 'yourKey' , resp <- beaGet(userSpecList) BDT <- bea2Tab(resp) } - diff --git a/man/beaGet.Rd b/man/beaGet.Rd index c61b3c6..914d87e 100644 --- a/man/beaGet.Rd +++ b/man/beaGet.Rd @@ -37,4 +37,3 @@ userSpecList <- list('UserID' = 'yourAPIKey' , 'Year' = 'X') BDT <- beaGet(userSpecList, asTable = TRUE) } - diff --git a/man/beaParamVals.Rd b/man/beaParamVals.Rd index 8e375d2..c57cbe6 100644 --- a/man/beaParamVals.Rd +++ b/man/beaParamVals.Rd @@ -23,4 +23,3 @@ Gives list of values possible for a given dataset's parameters beaParamVals('yourAPIkey', 'RegionalData', 'keycode') } \keyword{metadata} - diff --git a/man/beaParams.Rd b/man/beaParams.Rd index 936029d..eec9d07 100644 --- a/man/beaParams.Rd +++ b/man/beaParams.Rd @@ -21,4 +21,3 @@ Gives list of parameters possible for a given dataset beaParams('yourAPIkey', 'RegionalData') } \keyword{metadata} - diff --git a/man/beaSearch.Rd b/man/beaSearch.Rd index 78eb7c7..b9f1159 100644 --- a/man/beaSearch.Rd +++ b/man/beaSearch.Rd @@ -17,10 +17,9 @@ beaSearch(searchTerm, beaKey = NULL, asHtml = FALSE) An object of class 'data.table' with information about all indexed sets in which the search term was found. } \description{ -Searches indexed dataset table name, label, and series codes. CAUTION: Currently only works with NATIONAL datasets (NIPA, NIUnderlyingDetail), temporarily excluding FixedAssets, and REGIONAL datasets (RegionalData, RegionalProduct, RegionalIncome) +Searches indexed dataset table name, label, and series codes. CAUTION: Currently only works with NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets), temporarily excluding FixedAssets, and REGIONAL datasets (RegionalProduct, RegionalIncome) } \examples{ beaSearch('gross domestic product', asHtml = TRUE) } \keyword{search} - diff --git a/man/beaSets.Rd b/man/beaSets.Rd index cff8710..daa64d8 100644 --- a/man/beaSets.Rd +++ b/man/beaSets.Rd @@ -19,4 +19,3 @@ Returns a list of all datasets beaSets('yourAPIkey') } \keyword{metadata} - diff --git a/man/beaUpdateMetadata.Rd b/man/beaUpdateMetadata.Rd index d7e2163..5b49f95 100644 --- a/man/beaUpdateMetadata.Rd +++ b/man/beaUpdateMetadata.Rd @@ -22,4 +22,3 @@ beaUpdateMetadata(list('RegionalData', 'NIPA'), beaKey = 'yourAPIkey') } \keyword{metadata} \keyword{search} - diff --git a/man/beaViz.Rd b/man/beaViz.Rd index e481066..62335f8 100644 --- a/man/beaViz.Rd +++ b/man/beaViz.Rd @@ -30,4 +30,3 @@ userSpecList <- list('UserID' = 'yourKey' , 'TableID' = '68', 'Year' = 'X') } - From 06562306357e23e2778b4e2bffc5f83198255d1d Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 14 Jul 2017 11:34:27 -0400 Subject: [PATCH 07/32] Update README.md Note about patch (v1.0.2) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a50a61..4e573cd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Note: The RegionalIncome and RegionalProduct data sets will replace RegionalData at the end of May 2017. The "RegionalData" dataset will be discontinued at that time, and the documentation will be updated accordingly. +## Note: The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. # Instructions From 80cdc04255431b36c48b47631f7ece31b0c1ca3f Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 13 Sep 2017 13:51:02 -0400 Subject: [PATCH 08/32] Patch v1.0.3 Fix NULL for tables in updatemetadata function --- DESCRIPTION | 6 +++--- R/beaUpdateMetadata.r | 41 +++++++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 5966420..721e981 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,11 +1,11 @@ Package: bea.R Title: Bureau of Economic Analysis API -Version: 1.0.2 -Authors@R: c(person("Andrea", "Julca", role = c("aut", "cre"), +Version: 1.0.3 +Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), email = c("Andrea.Julca@bea.gov")), person("Jeff", "Chen", role = "ctb"), person("Walt", "Kampas", role = "ctb")) -Author: Andrea Julca [aut, cre], +Author: Andrea Batch [aut, cre], Jeff Chen [ctb], Walt Kampas [ctb] Depends: diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 8d5877e..23e4198 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -72,7 +72,7 @@ beaUpdateMetadata <- function(datasetList, beaKey){ #The line below should be suppressed if fixed - JSON was malformed due to missing commas #respStr <- gsub('}{', '},{', respStr, fixed = TRUE) metaList <-jsonlite::fromJSON(respStr) - metasetInfo <- as.data.table(metaList$BEAAPI$Datasets) + metasetInfo <- data.table::as.data.table(metaList$BEAAPI$Datasets) if(dim(metasetInfo)[1] == 0){ warning('API metadata not returned. Verify that you are using a valid API key, represented as a character string.') return('API metadata not returned. Verify that you are using a valid API key, represented as a character string.') @@ -83,14 +83,19 @@ beaUpdateMetadata <- function(datasetList, beaKey){ #And do it separately for each dataset if('nipa' %in% tolower(datasetList)){try({ nipaMDU <- metasetInfo[tolower(Datasetname) == 'nipa', MetaDataUpdated] - nipaTabs <- rbindlist(metasetInfo[tolower(Datasetname) == 'nipa', APITable]) + nipaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'nipa', APITable]) nipaTabs[, DatasetName := 'NIPA'] - nipaRows <- rbindlist(lapply(nipaTabs[, TableID], function(thisTab){ - tabPart <- nipaTabs[TableID == thisTab, as.data.table(Line[[1]])] - tabPart[, TableID := thisTab] + #Backend issue: Sometimes, NIPA table 38 has a NULL table for the line descriptions. Handle and warn the user. + handler <- c() + + nipaRowList <- lapply(nipaTabs[, TableID], function(thisTab){ + tabPart <- nipaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] + tryCatch({tabPart[, TableID := thisTab]}, error = function(e){handler <<- c(handler, paste0(e, ': NIPA Table ', thisTab))}) return(tabPart) - })) + }) + + nipaRows <- data.table::rbindlist(nipaRowList, use.names = TRUE) data.table::setkey(nipaTabs, key = TableID) data.table::setkey(nipaRows, key = TableID) @@ -116,11 +121,11 @@ beaUpdateMetadata <- function(datasetList, beaKey){ if('niunderlyingdetail' %in% tolower(datasetList)){try({ niudMDU <- metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', MetaDataUpdated] - niudTabs <- rbindlist(metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', APITable]) + niudTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', APITable]) niudTabs[, DatasetName := 'NIUnderlyingDetail'] - niudRows <- rbindlist(lapply(niudTabs[, TableID], function(thisTab){ - tabPart <- niudTabs[TableID == thisTab, as.data.table(Line[[1]])] + niudRows <- data.table::rbindlist(lapply(niudTabs[, TableID], function(thisTab){ + tabPart <- niudTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] tabPart[, TableID := thisTab] return(tabPart) })) @@ -150,11 +155,11 @@ beaUpdateMetadata <- function(datasetList, beaKey){ if('fixedassets' %in% tolower(datasetList)){try({ fixaMDU <- metasetInfo[tolower(Datasetname) == 'fixedassets', MetaDataUpdated] - fixaTabs <- rbindlist(metasetInfo[tolower(Datasetname) == 'fixedassets', APITable]) + fixaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'fixedassets', APITable]) fixaTabs[, DatasetName := 'FixedAssets'] - fixaRows <- rbindlist(lapply(fixaTabs[, TableID], function(thisTab){ - tabPart <- fixaTabs[TableID == thisTab, as.data.table(Line[[1]])] + fixaRows <- data.table::rbindlist(lapply(fixaTabs[, TableID], function(thisTab){ + tabPart <- fixaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] tabPart[, TableID := thisTab] return(tabPart) })) @@ -212,10 +217,10 @@ beaUpdateMetadata <- function(datasetList, beaKey){ rprdParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalproduct', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] rprdParNms <- attributes(rprdParams)$names - rprdPages <- rbindlist(rprdParams)[ParamValue != 'NULL', ParamValue] + rprdPages <- data.table::rbindlist(rprdParams)[ParamValue != 'NULL', ParamValue] - rprdIndex <- rbindlist(lapply(1:length(rprdPages), function(x){ - rprdDT <- as.data.table(rprdPages[[x]]) + rprdIndex <- data.table::rbindlist(lapply(1:length(rprdPages), function(x){ + rprdDT <- data.table::as.data.table(rprdPages[[x]]) rprdDT[, Parameter := rprdParNms[x]] return(rprdDT) })) @@ -232,10 +237,10 @@ beaUpdateMetadata <- function(datasetList, beaKey){ rincParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalincome', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] rincParNms <- attributes(rincParams)$names - rincPages <- rbindlist(rincParams)[ParamValue != 'NULL', ParamValue] + rincPages <- data.table::rbindlist(rincParams)[ParamValue != 'NULL', ParamValue] - rincIndex <- rbindlist(lapply(1:length(rincPages), function(x){ - rincDT <- as.data.table(rincPages[[x]]) + rincIndex <- data.table::rbindlist(lapply(1:length(rincPages), function(x){ + rincDT <- data.table::as.data.table(rincPages[[x]]) rincDT[, Parameter := rincParNms[x]] return(rincDT) })) From 7659360bed1f30c55dce96113920781220d5dde7 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Thu, 7 Dec 2017 13:18:00 -0500 Subject: [PATCH 09/32] Patch v1.0.4 Update to reflect new metadata structure, fixing beaSearch() --- DESCRIPTION | 39 ++++++------------- INDEX | 15 +++++++ Meta/Rd.rds | Bin 0 -> 623 bytes Meta/features.rds | Bin 0 -> 112 bytes Meta/hsearch.rds | Bin 0 -> 612 bytes Meta/links.rds | Bin 0 -> 207 bytes Meta/nsInfo.rds | Bin 0 -> 337 bytes Meta/package.rds | Bin 0 -> 1484 bytes R/bea.R | 27 +++++++++++++ R/bea.R.rdb | Bin 0 -> 22018 bytes R/bea.R.rdx | Bin 0 -> 361 bytes help/AnIndex | 9 +++++ help/aliases.rds | Bin 0 -> 143 bytes help/bea.R.rdb | Bin 0 -> 13467 bytes help/bea.R.rdx | Bin 0 -> 343 bytes help/paths.rds | Bin 0 -> 228 bytes html/00Index.html | 42 ++++++++++++++++++++ html/R.css | 97 ++++++++++++++++++++++++++++++++++++++++++++++ 18 files changed, 201 insertions(+), 28 deletions(-) create mode 100644 INDEX create mode 100644 Meta/Rd.rds create mode 100644 Meta/features.rds create mode 100644 Meta/hsearch.rds create mode 100644 Meta/links.rds create mode 100644 Meta/nsInfo.rds create mode 100644 Meta/package.rds create mode 100644 R/bea.R create mode 100644 R/bea.R.rdb create mode 100644 R/bea.R.rdx create mode 100644 help/AnIndex create mode 100644 help/aliases.rds create mode 100644 help/bea.R.rdb create mode 100644 help/bea.R.rdx create mode 100644 help/paths.rds create mode 100644 html/00Index.html create mode 100644 html/R.css diff --git a/DESCRIPTION b/DESCRIPTION index 721e981..90002ff 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: bea.R Title: Bureau of Economic Analysis API -Version: 1.0.3 +Version: 1.0.4 Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), email = c("Andrea.Julca@bea.gov")), person("Jeff", "Chen", role = "ctb"), @@ -8,32 +8,11 @@ Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), Author: Andrea Batch [aut, cre], Jeff Chen [ctb], Walt Kampas [ctb] -Depends: - R (>= 3.2.1), - data.table -Imports: - httr, - DT, - shiny, - jsonlite, - googleVis, - shinydashboard, - ggplot2, - stringr, - chron, - gtable, - scales, - htmltools, - httpuv, - xtable, - stringi, - magrittr, - htmlwidgets, - Rcpp, - munsell, - colorspace, - plyr, - yaml +Depends: R (>= 3.2.1), data.table +Imports: httr, DT, shiny, jsonlite, googleVis, shinydashboard, ggplot2, + stringr, chron, gtable, scales, htmltools, httpuv, xtable, + stringi, magrittr, htmlwidgets, Rcpp, munsell, colorspace, + plyr, yaml Description: Provides an R interface for the Bureau of Economic Analysis (BEA) API (see for more information) that serves two core purposes - @@ -45,7 +24,11 @@ Description: Provides an R interface for the Bureau of Economic Analysis (BEA) or are in early stages of development. Important Note - You must have an API key to use this library. Register for a key at . -URL: https://github.com/us-bea/beaR +URL: https://github.com/us-bea/beaR License: CC0 LazyData: no RoxygenNote: 6.0.1 +NeedsCompilation: no +Packaged: 2017-12-07 18:11:52 UTC; ODACJ1 +Maintainer: Andrea Batch +Built: R 3.4.1; ; 2017-12-07 18:14:06 UTC; windows diff --git a/INDEX b/INDEX new file mode 100644 index 0000000..ef9f5f2 --- /dev/null +++ b/INDEX @@ -0,0 +1,15 @@ +bea2List Convert BEA API httr response payload to list +bea2Tab Convert BEA API httr response or list payload + to data.table +beaGet Pass list of user specifications (including API + key) to return data from BEA API. +beaParamVals Gives list of values possible for a given + dataset's parameters +beaParams Gives list of parameters possible for a given + dataset +beaSearch Search a selection of indexed BEA data table + names, series labels, and series codes. +beaSets Returns a list of all datasets +beaUpdateMetadata Download BEA metadata into library/data folder + if needed +beaViz Visualize BEA API response payload diff --git a/Meta/Rd.rds b/Meta/Rd.rds new file mode 100644 index 0000000000000000000000000000000000000000..d4b2d7760e622701fe51fb4f2925c9676974a131 GIT binary patch literal 623 zcmV-#0+9V5iwFP!000002DMaOixV*voo&18v??m=vjksM&M^imuLpK6%fy8J?sb8dzvTXIrF?$T3txZXhtGiq5B$>n(gOzzysas7lW38BW1e zqHZJdIZvs94`3*^w4Qy+E-X;j9tZ8df5i*;-Gf4PQ=64sVJ`GmfI@7A(kk`cTP>ND zT&S@jF#7AZ&iCk*6iZNsygV9_(fBPnH%1W!I+sEN$?2L)ni3-k-&W=M<&&gx!PUvG z{D#grc#2PBs&x@2GqTX2h|VEl8B3^PNJH*3k?=*z#F2?+^F32BKb2}x{*t&J?o0^ALmVr+g2Ym*XkGA1NVN?AC2&YYAL z*^^jOR8^y9y;vqOTXoi~WiuruW=a|wY%oxKnRwRwjIXYnafh|>dX=pj`i9GITxLD- Omz`nmEYF2?K#KrJYbcxm literal 0 HcmV?d00001 diff --git a/Meta/hsearch.rds b/Meta/hsearch.rds new file mode 100644 index 0000000000000000000000000000000000000000..5c27b0098a14437a1373d12e185e202f17202374 GIT binary patch literal 612 zcmV-q0-OCGiwFP!000002F+F9Zxb;LzW!j{5J&?akx;}7AVCp>K@k$DuxXkYsBER; z)pzH1(bCH)Njthfp5e>IYgbKGC&sjgQ~cS^XU9%_zivlSRE=u&N>r_p7(Jk`PO5cU zKasRX>#Z1}xqr`ChaZWOo+aeylX zcaV*D2z9`~um{Qp-5Tp=6$c0=Ih>(9K*#ob1b^l!IQ)hVXoZ2{=hK;;GCMHA-bR@F9+H@~mJo=td^ha2INz6SaeUwTvQev8m`{vd6ubtAye4gE&D=NiwcwCI0cE!Qv8jnPuQpL>mf2? zw$I7c$RZ-ds0c!qvMSLjT0Y*ReSdySvUs9r6eaKN=x4r#gTM_*JXHs`WR zF20*#Bo?+m^sRf}aF`AxM=;=L(Abl42OJ-@y1Nym`gbDY5!aPYO@Yp3!V$MKx*haH z%1C|yKfLLkx$@z9&A%Go^vdbnWvG?<>gff|uQ5SeN#JTtdwq5%rcJ!hO&p%D<~3rzUp* literal 0 HcmV?d00001 diff --git a/Meta/links.rds b/Meta/links.rds new file mode 100644 index 0000000000000000000000000000000000000000..5246004a5ce40cefaf8e00e2968634b577742e1e GIT binary patch literal 207 zcmV;=05Ja_iwFP!0000028-ZgU|?WkU}j-tU}6R_1%L!60}Bu{Fv#iY=>t(xYNB3{ zenv@d4v1;wlUZD%2jW3h$zoL%l9+_7NCulC_f!;vl(4A@NGwXs4NJ@^Mph}0Qzc<# z!KsNw$r%Ja5S&_qVwO5KMWF>Li6yDNsU?X(I+37%!!oNNY8Y6UfNB__YFYCVb5o0f z4CJuqfCV*_&khY#D3=Wqd{7<_azH`FIN?EpBmnU|l93>9Lb-w%9zwDU=yV|K9{{iX J2rVxH0067SO%MP8 literal 0 HcmV?d00001 diff --git a/Meta/nsInfo.rds b/Meta/nsInfo.rds new file mode 100644 index 0000000000000000000000000000000000000000..8566bc519f310af5bce05cd3d482ed2dbe5500e7 GIT binary patch literal 337 zcmV-X0j~ZZiwFP!0000028B{>OT#b_&brR6n;Vn;4?oPGpdg4Z!_MK?tBq}>O-6Ex z^T&(Hnv{457Ot1)xtH9N%OV}_Suw>|#EBl*Sb3U`Sv^HSraXl>o;T)l8IEjp_ zYTqba6FRGusv5o%h6K_YQ4?-tY9SAVTpY;~OkF6@CEeDb7P8WQ-h_mct1TVKDF_1o zDw(_)B^!ZM;N(@S_9lP0_k0%kg2Vb&7z`6RyoJKU6AQ0-2%cKB0S)aA8WSc8TukH~ z^h+JJ%sGbmnT1b#tApQh1g9t3YbU<^fXoYw{qi60^AeBKBszd$DO&61{>Z`(Eyb{w}!Tx=^)pxdYQ;C+~bIdbfE?U1xV6DJtb zWli9?-G-nrXo;4&NTNVecDx_9ulqs!58I9s=~zm#7wyvuxDm;FdG7Av>GVUrQmIrc ztF@I%brm01AK`!Nxb+bKKCIL#8~FF$h!Ur77EcZmK}iC93`Z`Hc*tDXk4P|=Ov3)z zvDN7~+s;$7_{D9;R7f5*8~c%m>WvmO4v2Cm_#k*d;U&1u21%4Ya0P8_w(1)jp#Ra3 zupm3nbe-2p;F4Dwlh3D(%~TYHt%uiiJl1A<6B=EcZ@6mID2jehg4E-;B#enH3U3

P*ccA%|7W-{9}c0TDtbMGa5>2#gWW(z!`h@;3T zpyvG7iBh5khl3W#35(_}_z6)4OwktjocjTN$D}#)h@6Z#5gs1-allo#RhLSz$VUtA zMDPd?Qsb!Ll7OP(M1_IkJV+l^oJ?DAm5CTt)`F1uf~7FD^o)5vRVd$g;}{Q7R{IGCgKoP>ol2d+Y* z7>_m)22r3j5v7`O3ImL0r`y2ogzcqJ6@NmsSrh5X3iB zH8q!cPzf7+f)^cq6$u`#0_8pIL;kF_odASQx@6mu_kF;b)fmcFG8bWfN>6WQ~C zj1awp=DKOLG}44f0ZK{)@*T^BwR8nT!&7ueG44h1=c$abaEe+2#*`>5u+)m$Ou$Bh zh&j+Jbc_6A5vGI4j29vG7*VO!3HPK93rj}Qask>#QK^WZS@YDn3(_WaPL!Y$tLHl{HOm=Unaew#{QT;%$vHhgG z-Fd#%>27U5htAhKozBizU3fd_?ZWBde($wa_$=3&Ufk9o_l)Qlee66>oz5=oLc#dc zo$Y6t@filkXR=bMRZ(TdVvLYUGJPRjzZBNahY+U0{o%f5xZ)wlfTbDu_< zA!h608%jOd<6+DKvSf7K#N(ND{X3+p!XLFb?;Rv8Q26jWR!YAoYvz5qg1-+mF7vBp zd-)u?0g*O`s}@UtDCbDPa5&8+?4vltQrwP`kP7B5wo@pnMeC+gSbuy+sS9Fjxx%mf zVUBC&c%{Ec66Q>ID6_6%u5DuPpPs9EOqcSrTJVBq@*CB?mv^MFdY!_mMN=)4om@ON z?=?+mi-E^B3Hh`dSpWY>s>_kA6oA*4#*n;=m7I&45N@@w$XvzvdwhrAnjUuk-s7#h z)x$wa&3ozaR8o1}j$0_d#iJJZdDI2}{a4D%?zy91Q3toRD zmDNo@t^QqWew=Hv*G)6m1dC1WMw7a|=@gnsp(*4pdH&MoFX4?#mA@o;(iccvB;_q6 zTP96`1UHMiT%=smm)~Z&1g|fK)1&iV|M+ZheEKFoB^r!qhXg@M8n;*l9BmS*Oz4&zVU`Ku@A5dZ)NG3jCe literal 0 HcmV?d00001 diff --git a/R/bea.R b/R/bea.R new file mode 100644 index 0000000..3b65e3c --- /dev/null +++ b/R/bea.R @@ -0,0 +1,27 @@ +# File share/R/nspackloader.R +# Part of the R package, http://www.R-project.org +# +# Copyright (C) 1995-2012 The R Core Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# A copy of the GNU General Public License is available at +# http://www.r-project.org/Licenses/ + +local({ + info <- loadingNamespaceInfo() + pkg <- info$pkgname + ns <- .getNamespace(as.name(pkg)) + if (is.null(ns)) + stop("cannot find namespace environment for ", pkg, domain = NA); + dbbase <- file.path(info$libname, pkg, "R", pkg) + lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.") +}) diff --git a/R/bea.R.rdb b/R/bea.R.rdb new file mode 100644 index 0000000000000000000000000000000000000000..c21c74743e23047ee4a9ea3e4f0e8092c74f6607 GIT binary patch literal 22018 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 literal 0 HcmV?d00001 diff --git a/R/bea.R.rdx b/R/bea.R.rdx new file mode 100644 index 0000000000000000000000000000000000000000..d224573abd20f00aa1cd6b300d5e29af32afe977 GIT binary patch literal 361 zcmV-v0hazBiwFP!0000023?WOO2a@9$0tp!ZLL&Mk*XjbJZNdb)(_~(BE^d>g=p~> zCdp`n{UQkkeF-nVhX-%s3yF^)sFQTVZVYVx^ZO4wvpaiR0DuhWh6Wiu3fK6j3oY_m zj`Ohf!CIBPZU5tE){4UKT*j8Xy91CdOWr>LFhKGFv$iMsu+LnQTp@rZL-MJ|`Yrj) z1<1WgKHmh`_~ITMgT}4$tP5itQNY1Ue7U(oewFcN>S9QIN@PW)SKoW$=tn%HGB}O3{3<#A9u_a H$N~TW-|Dgg literal 0 HcmV?d00001 diff --git a/help/AnIndex b/help/AnIndex new file mode 100644 index 0000000..b7e8842 --- /dev/null +++ b/help/AnIndex @@ -0,0 +1,9 @@ +bea2List bea2List +bea2Tab bea2Tab +beaGet beaGet +beaParams beaParams +beaParamVals beaParamVals +beaSearch beaSearch +beaSets beaSets +beaUpdateMetadata beaUpdateMetadata +beaViz beaViz diff --git a/help/aliases.rds b/help/aliases.rds new file mode 100644 index 0000000000000000000000000000000000000000..9fdbca723880bede26e9c81165660060ed5a282c GIT binary patch literal 143 zcmb2|=3oE=w(bW>2?+^F32BKb2}x{*tPL#c%-jOT1_dfh)ueu=h)s9+`9`76BS~n= zX|^Z3mLF2FY~0guWYLj3Nh=umeH3&ImrHmC7Gxy_7O_p5cyOhvL8YUD`4$D$jVf2o vx2gzws4LwRofdiYz=1<7PYj)0BR>lj2X{C29DJA6R?m=Vd}m%JBLf2f>Pj`K literal 0 HcmV?d00001 diff --git a/help/bea.R.rdb b/help/bea.R.rdb new file mode 100644 index 0000000000000000000000000000000000000000..61fd5d608a0483e8e423aa0441eb99df31a2c647 GIT binary patch literal 13467 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 L9qX?Ln(_TFvp-6! literal 0 HcmV?d00001 diff --git a/help/bea.R.rdx b/help/bea.R.rdx new file mode 100644 index 0000000000000000000000000000000000000000..6cae1e2a781702152d2bc59add7cdb4006040d13 GIT binary patch literal 343 zcmV-d0jT~TiwFP!0000024&IRF2q0-0N~T@58Lb}1Q%T3hJ*`jm&Lw-L`cZ8aXalE zG-+#1o4w$kcklv|O+0`LZy@mkcnxsHzM1h6CJ`VGatlxH64dsBJtozf1K7oO?-h4S(-?YERyU&tTI>#vmW zjRvj304u+nov;{FT1@1Z9R|pCUS#4BG96CQnmS)25~^O)X8^nszkpjw%Ii-s5~| pw=-o!28@Tyk5G2N<#>)9lR!m+tGLfGO|d7E{sMj>_AuuH0014Vr#}Dy literal 0 HcmV?d00001 diff --git a/help/paths.rds b/help/paths.rds new file mode 100644 index 0000000000000000000000000000000000000000..c184e59cd939977c12a4aa164e187256b0b6d57f GIT binary patch literal 228 zcmVp@O + +R: Bureau of Economic Analysis API + + + +

Bureau of Economic Analysis API + +

+
+
+[Up] +[Top] +

Documentation for package ‘bea.R’ version 1.0.4

+ + + +

Help Pages

+ + + + + + + + + + + + + + + + + + + + + +
bea2ListConvert BEA API httr response payload to list
bea2TabConvert BEA API httr response or list payload to data.table
beaGetPass list of user specifications (including API key) to return data from BEA API.
beaParamsGives list of parameters possible for a given dataset
beaParamValsGives list of values possible for a given dataset's parameters
beaSearchSearch a selection of indexed BEA data table names, series labels, and series codes.
beaSetsReturns a list of all datasets
beaUpdateMetadataDownload BEA metadata into library/data folder if needed
beaVizVisualize BEA API response payload
+ diff --git a/html/R.css b/html/R.css new file mode 100644 index 0000000..f10f5ea --- /dev/null +++ b/html/R.css @@ -0,0 +1,97 @@ +body { + background: white; + color: black; +} + +a:link { + background: white; + color: blue; +} + +a:visited { + background: white; + color: rgb(50%, 0%, 50%); +} + +h1 { + background: white; + color: rgb(55%, 55%, 55%); + font-family: monospace; + font-size: x-large; + text-align: center; +} + +h2 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-size: large; + text-align: center; +} + +h3 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-size: large; +} + +h4 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-style: italic; + font-size: large; +} + +h5 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; +} + +h6 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-style: italic; +} + +img.toplogo { + width: 4em; + vertical-align: middle; +} + +img.arrow { + width: 30px; + height: 30px; + border: 0; +} + +span.acronym { + font-size: small; +} + +span.env { + font-family: monospace; +} + +span.file { + font-family: monospace; +} + +span.option{ + font-family: monospace; +} + +span.pkg { + font-weight: bold; +} + +span.samp{ + font-family: monospace; +} + +div.vignettes a:hover { + background: rgb(85%, 85%, 85%); +} From 7f072af6b57596015b15eeac17c9f858735622da Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 23 Feb 2018 11:45:03 -0500 Subject: [PATCH 10/32] Patch for change in NIPA GET params Change from beaGet(list(... , "TableID" = "[TableIdn]", ...)) to beaGet(list(... , "TableName" = "[TableId]", ...)); old table IDs became obsolete. Use beaSearch('[some NIPA value]', beaKey) or beaParamVals(beaKey, 'NIPA', 'TableName') to check for new table IDs to use with TableName parameter. --- DESCRIPTION | 39 ++++++++++++++++++++++++++++----------- R/beaSearch.r | 2 +- R/beaUpdateMetadata.r | 16 ++++++++++++++-- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 90002ff..655f52f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: bea.R Title: Bureau of Economic Analysis API -Version: 1.0.4 +Version: 1.0.5 Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), email = c("Andrea.Julca@bea.gov")), person("Jeff", "Chen", role = "ctb"), @@ -8,11 +8,32 @@ Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), Author: Andrea Batch [aut, cre], Jeff Chen [ctb], Walt Kampas [ctb] -Depends: R (>= 3.2.1), data.table -Imports: httr, DT, shiny, jsonlite, googleVis, shinydashboard, ggplot2, - stringr, chron, gtable, scales, htmltools, httpuv, xtable, - stringi, magrittr, htmlwidgets, Rcpp, munsell, colorspace, - plyr, yaml +Depends: + R (>= 3.2.1), + data.table +Imports: + httr, + DT, + shiny, + jsonlite, + googleVis, + shinydashboard, + ggplot2, + stringr, + chron, + gtable, + scales, + htmltools, + httpuv, + xtable, + stringi, + magrittr, + htmlwidgets, + Rcpp, + munsell, + colorspace, + plyr, + yaml Description: Provides an R interface for the Bureau of Economic Analysis (BEA) API (see for more information) that serves two core purposes - @@ -24,11 +45,7 @@ Description: Provides an R interface for the Bureau of Economic Analysis (BEA) or are in early stages of development. Important Note - You must have an API key to use this library. Register for a key at . -URL: https://github.com/us-bea/beaR +URL: https://github.com/us-bea/beaR License: CC0 LazyData: no RoxygenNote: 6.0.1 -NeedsCompilation: no -Packaged: 2017-12-07 18:11:52 UTC; ODACJ1 -Maintainer: Andrea Batch -Built: R 3.4.1; ; 2017-12-07 18:14:06 UTC; windows diff --git a/R/beaSearch.r b/R/beaSearch.r index 10c69ff..6b506bf 100644 --- a/R/beaSearch.r +++ b/R/beaSearch.r @@ -220,7 +220,7 @@ is not recommended, as the key is needed to update locally stored metadata.')} paste0( "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", DatasetName, - "', 'TableID' = '", + "', 'TableName' = '", TableID, "', ...))" ) diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 23e4198..1bac503 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -85,7 +85,11 @@ beaUpdateMetadata <- function(datasetList, beaKey){ nipaMDU <- metasetInfo[tolower(Datasetname) == 'nipa', MetaDataUpdated] nipaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'nipa', APITable]) nipaTabs[, DatasetName := 'NIPA'] - + #TableIDN has become obsolete; we should no longer overwrite to rename + #setnames(nipaTabs, old = names(nipaTabs)[grepl('tableidn', tolower(names(nipaTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(nipaTabs, old = names(nipaTabs)[tolower(names(nipaTabs)) == 'tableid'], new = 'TableID') + #Backend issue: Sometimes, NIPA table 38 has a NULL table for the line descriptions. Handle and warn the user. handler <- c() @@ -123,7 +127,11 @@ beaUpdateMetadata <- function(datasetList, beaKey){ niudMDU <- metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', MetaDataUpdated] niudTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', APITable]) niudTabs[, DatasetName := 'NIUnderlyingDetail'] - + #TableIDN has become obsolete; we should no longer overwrite to rename + #setnames(niudTabs, old = names(niudTabs)[grepl('tableidn', tolower(names(niudTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(niudTabs, old = names(niudTabs)[tolower(names(niudTabs)) == 'tableid'], new = 'TableID') + niudRows <- data.table::rbindlist(lapply(niudTabs[, TableID], function(thisTab){ tabPart <- niudTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] tabPart[, TableID := thisTab] @@ -157,6 +165,10 @@ beaUpdateMetadata <- function(datasetList, beaKey){ fixaMDU <- metasetInfo[tolower(Datasetname) == 'fixedassets', MetaDataUpdated] fixaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'fixedassets', APITable]) fixaTabs[, DatasetName := 'FixedAssets'] + #No TableIDN here + #setnames(fixaTabs, old = names(fixaTabs)[grepl('tableidn', tolower(names(fixaTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(fixaTabs, old = names(fixaTabs)[tolower(names(fixaTabs)) == 'tableid'], new = 'TableID') fixaRows <- data.table::rbindlist(lapply(fixaTabs[, TableID], function(thisTab){ tabPart <- fixaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] From 48e747232283a9586bd3bf12e8b0ea0efee94988 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 23 Feb 2018 12:02:37 -0500 Subject: [PATCH 11/32] Handle difference in FixedAssets vs other National beaGet requires TableID for fixedassets, TableName for NIPA and NIUnderlyingDetail --- R/beaSearch.r | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/R/beaSearch.r b/R/beaSearch.r index 6b506bf..2aa3776 100644 --- a/R/beaSearch.r +++ b/R/beaSearch.r @@ -251,14 +251,15 @@ is not recommended, as the key is needed to update locally stored metadata.')} paste0( "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", DatasetName, - "', 'TableID' = '", + "', 'TableName' = '", TableID, "', ...))" ) ] - - + #FixedAssets is different from NIPA and NIUnderlyingDetail; handler here + nPerfectMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] + nReasonableMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] From e7295f9dd90a074c46281dc42f606526610eb35c Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 23 Feb 2018 12:17:16 -0500 Subject: [PATCH 12/32] Add 1.0.5 patch note, change examples --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4e573cd..8fefea5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,14 @@ -## Note: The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. +## Patch 1.0.5 Note: The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed; "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. + +To find the new parameters to use with TableName, use any one of the following: + ```r + beaSearch('NIPA', '[your 36-digit BEA API key]') + beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') + beaSearch('NIUnderlyingDetail', '[your 36-digit BEA API key]') + beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') + ``` + +#### Patch 1.0.2 Note: The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. # Instructions @@ -82,7 +92,7 @@ beaSpecs <- list( 'UserID' = beaKey , 'Method' = 'GetData', 'datasetname' = 'NIPA', - 'TableID' = '66', + 'TableName' = 'T20305', 'Frequency' = 'Q', 'Year' = 'X', 'ResultFormat' = 'json' From 2c49d92d89fbe71041ecd230e126514467258b13 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 23 Feb 2018 12:17:37 -0500 Subject: [PATCH 13/32] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8fefea5..85e0088 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ ## Patch 1.0.5 Note: The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed; "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. To find the new parameters to use with TableName, use any one of the following: + ```r beaSearch('NIPA', '[your 36-digit BEA API key]') beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') From 386ecd649c64f79dcf3da24c86487d6f454f060f Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 23 Feb 2018 12:18:42 -0500 Subject: [PATCH 14/32] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 85e0088..5c4fd70 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Patch 1.0.5 Note: The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed; "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. +## Patch 1.0.5 Note: The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. To find the new parameters to use with TableName, use any one of the following: @@ -9,7 +9,7 @@ To find the new parameters to use with TableName, use any one of the following: beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') ``` -#### Patch 1.0.2 Note: The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. +### Patch 1.0.2 Note: The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. # Instructions From ff6d0efa58cb53e88699e2139bd32302b97c9634 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 23 Feb 2018 13:05:29 -0500 Subject: [PATCH 15/32] Update DNS * Change from www.bea.gov to apps.bea.gov * Add .onLoad message about change from TableID => TableName * Update GitHub URL in DESCRIPTION --- DESCRIPTION | 4 ++-- R/beaGet.r | 2 +- R/zzz.R | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 R/zzz.R diff --git a/DESCRIPTION b/DESCRIPTION index 655f52f..1dec2f7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: bea.R Title: Bureau of Economic Analysis API -Version: 1.0.5 +Version: 1.0.6 Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), email = c("Andrea.Julca@bea.gov")), person("Jeff", "Chen", role = "ctb"), @@ -45,7 +45,7 @@ Description: Provides an R interface for the Bureau of Economic Analysis (BEA) or are in early stages of development. Important Note - You must have an API key to use this library. Register for a key at . -URL: https://github.com/us-bea/beaR +URL: https://github.com/us-bea/bea.R License: CC0 LazyData: no RoxygenNote: 6.0.1 diff --git a/R/beaGet.r b/R/beaGet.r index fcce0be..d6b0187 100644 --- a/R/beaGet.r +++ b/R/beaGet.r @@ -47,7 +47,7 @@ beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=T #Parse user settings into API URL beaUrl <- utils::URLencode( paste0( - 'https://www.bea.gov/api/data?UserID=', + 'https://apps.bea.gov/api/data?UserID=', beaSpec$userid, '&', paste( diff --git a/R/zzz.R b/R/zzz.R new file mode 100644 index 0000000..93dbbbf --- /dev/null +++ b/R/zzz.R @@ -0,0 +1,3 @@ +.onLoad <- function(lib, pkg) { + packageStartupMessage("Note: As of February 2018, beaGet() requires 'TableName' for NIPA and NIUnderlyingDetail data instead of 'TableID.' See https://github.us-bea/bea.R for details.") +} From efd5223f90f015bd419227afa1fc6a6ff223c23d Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Fri, 23 Feb 2018 14:16:40 -0500 Subject: [PATCH 16/32] Patch v1.0.6 --- Meta/package.rds | Bin 1484 -> 1481 bytes help/bea.R.rdb | Bin 13467 -> 13442 bytes help/bea.R.rdx | Bin 343 -> 334 bytes help/paths.rds | Bin 228 -> 225 bytes html/00Index.html | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Meta/package.rds b/Meta/package.rds index fee21edec3612f0d6297e282636228e5aff97f1e..46af56f9c7d633d6dcac039cba9f325d27319194 100644 GIT binary patch literal 1481 zcmV;)1vdI0iwFP!000002Gv(vZ`(E$wjH;*6x#|E==RnF?_n|K$gxutThaz~E*R2f zP2jlQhM+KLiI%xYqCir1ydSpL{hs_Ot?SMDm>PeCNWWqaQXZl}fF$ zQmICgo&L*_y+BEeiT3BB_Z ztJ86|ofl^Di@O<9A$hdf=tUl?H(Jm*Aj+NKgWv&$SKw|oNTT$CD`=zH+E`x){f~x( z1=)F~>%2(AnXmkVLaMh?$6#bqAsl{(e7!z3(ZW{Kl zGrN!yhD&7G0_6Ci1&F4tfi?w~sPsV_(5R3>W}61*vp#I@zk(g7>vWne@Q5OgBBOws z^Is=Qi546US|BGZnz!I5WEn6;Ti|o<2lPFY=FB5h%jN9j2UgUpTEZ|8zfnMWm%2>QSxMa39JVax@n35CBZpv{BhUQ@>vD+x9w zrSMX7-EFsLvzcRZ-p0c=J`ZPfG?Y|KnM;QxX2S#*Lq9>|4$|LGEh1LP1w|gX3W;Jo zY9bAyKx-mPHRI?IO2mnXxx}3<*wB^NabUpV_*x0#s`fyTNNR}oDJNc?-%z#L z`~YLY!_2$mp1uZv$?tEC1*4G{%r%S5yhI|YoaXw4gc%oCkcJX2l{JyF1dm4)Msx7! zm?T(IsA%nJJeTM-gxq6eMm+??6atU6E(stef`k-fFZa+>ECWn^O9OOInM8=}c|bMf0QL8JsFB?9Xm(}cNn1w-H|nxp9V!ug9-#vq)bmVhxO3KJ}~qJ|0BNDwgx zdW~kWzF36eATq0qka~=$6m`Nqsolbqku+U^*eEI$@iR1!PHDj7kVZ62<7~G+fa+dak35Y_Px#9S5|nKJ}55CatZevRD`QRh(pgl*DZo zdGy+G$5>yE?TK1LqKePdBpEp_58H{{Lgn^y>s&cJ+%}K3h}%Z_0vl!L*7mdRcIT_D z?e1202RdKxZg+N{cj4XOa1YLodWUbU!sof(^zyC_xo|^VB?sWEG4+`KryPcg3 ze1_ifnXFXmHB_lujuDoUOy3AMZ-v!!;$C5HtjvI^MJro2>GxYTK|7fYRjHf3&b~;=8(LJYR<%M3U?wbB3Ci?p59}(uBV;9w|J*+?PyR^ z^Fca2l~i7{^H@p!^~Drd65!+f>{k+H)l7_K)yZ`(Eyb{w}!Tx=^)pxdYQ;C+~bIdbfE?U1xV6DJtb zWli9?-G-nrXo;4&NTNVecDx_9ulqs!58I9s=~zm#7wyvuxDm;FdG7Av>GVUrQmIrc ztF@I%brm01AK`!Nxb+bKKCIL#8~FF$h!Ur77EcZmK}iC93`Z`Hc*tDXk4P|=Ov3)z zvDN7~+s;$7_{D9;R7f5*8~c%m>WvmO4v2Cm_#k*d;U&1u21%4Ya0P8_w(1)jp#Ra3 zupm3nbe-2p;F4Dwlh3D(%~TYHt%uiiJl1A<6B=EcZ@6mID2jehg4E-;B#enH3U3

P*ccA%|7W-{9}c0TDtbMGa5>2#gWW(z!`h@;3T zpyvG7iBh5khl3W#35(_}_z6)4OwktjocjTN$D}#)h@6Z#5gs1-allo#RhLSz$VUtA zMDPd?Qsb!Ll7OP(M1_IkJV+l^oJ?DAm5CTt)`F1uf~7FD^o)5vRVd$g;}{Q7R{IGCgKoP>ol2d+Y* z7>_m)22r3j5v7`O3ImL0r`y2ogzcqJ6@NmsSrh5X3iB zH8q!cPzf7+f)^cq6$u`#0_8pIL;kF_odASQx@6mu_kF;b)fmcFG8bWfN>6WQ~C zj1awp=DKOLG}44f0ZK{)@*T^BwR8nT!&7ueG44h1=c$abaEe+2#*`>5u+)m$Ou$Bh zh&j+Jbc_6A5vGI4j29vG7*VO!3HPK93rj}Qask>#QK^WZS@YDn3(_WaPL!Y$tLHl{HOm=Unaew#{QT;%$vHhgG z-Fd#%>27U5htAhKozBizU3fd_?ZWBde($wa_$=3&Ufk9o_l)Qlee66>oz5=oLc#dc zo$Y6t@filkXR=bMRZ(TdVvLYUGJPRjzZBNahY+U0{o%f5xZ)wlfTbDu_< zA!h608%jOd<6+DKvSf7K#N(ND{X3+p!XLFb?;Rv8Q26jWR!YAoYvz5qg1-+mF7vBp zd-)u?0g*O`s}@UtDCbDPa5&8+?4vltQrwP`kP7B5wo@pnMeC+gSbuy+sS9Fjxx%mf zVUBC&c%{Ec66Q>ID6_6%u5DuPpPs9EOqcSrTJVBq@*CB?mv^MFdY!_mMN=)4om@ON z?=?+mi-E^B3Hh`dSpWY>s>_kA6oA*4#*n;=m7I&45N@@w$XvzvdwhrAnjUuk-s7#h z)x$wa&3ozaR8o1}j$0_d#iJJZdDI2}{a4D%?zy91Q3toRD zmDNo@t^QqWew=Hv*G)6m1dC1WMw7a|=@gnsp(*4pdH&MoFX4?#mA@o;(iccvB;_q6 zTP96`1UHMiT%=smm)~Z&1g|fK)1&iV|M+ZheEKFoB^r!qhXg@M8n;*l9BmS*Oz4&zVU`Ku@A5dZ)NG3jCe diff --git a/help/bea.R.rdb b/help/bea.R.rdb index 61fd5d608a0483e8e423aa0441eb99df31a2c647..8bbbda07703066d4f6ce6f939ab0ec1d6bfa0721 100644 GIT binary patch literal 13442 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 ZnN67WKZpzT`g|pPbza};BY&Al{}<>^0YLx& literal 13467 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 L9qX?Ln(_TFvp-6! diff --git a/help/bea.R.rdx b/help/bea.R.rdx index 6cae1e2a781702152d2bc59add7cdb4006040d13..0f0f06cd7e6b577b47f1d88547b699bfb49eb9f5 100644 GIT binary patch literal 334 zcmV-U0kQrciwFP!0000024&H`PQx$|0N_jW1C3g#2pC|12_zVRmX@DR3`i^>Ar&fC zCp{pj2~`p*#LR2JPIn#yvG+Y#fpZeeIf&%=zB|XU&Q~q~RKTbZ)h)n(zb8fs}$Qe+UrMD?`UsM$W!g@ciQiR2E|~2 zm7UFwM2HCmjqI>_a@Ir9It`Mv@Qn0@@CrJ_6I8_->0HDj?2BPih@1#Wi7*IU2xuQA5R*BSpl9L1O literal 343 zcmV-d0jT~TiwFP!0000024&IRF2q0-0N~T@58Lb}1Q%T3hJ*`jm&Lw-L`cZ8aXalE zG-+#1o4w$kcklv|O+0`LZy@mkcnxsHzM1h6CJ`VGatlxH64dsBJtozf1K7oO?-h4S(-?YERyU&tTI>#vmW zjRvj304u+nov;{FT1@1Z9R|pCUS#4BG96CQnmS)25~^O)X8^nszkpjw%Ii-s5~| pw=-o!28@Tyk5G2N<#>)9lR!m+tGLfGO|d7E{sMj>_AuuH0014Vr#}Dy diff --git a/help/paths.rds b/help/paths.rds index c184e59cd939977c12a4aa164e187256b0b6d57f..76d779449bed413c6a875189b0ab6902cd47c60a 100644 GIT binary patch literal 225 zcmV<703QDziwFP!000002DOq+3c^4Pg=1S63W6tTs1_7=q99@wnf_S8O>9RTu{v~S z<>AGt2=)N&BFQ6*?>$J;J^)x?I~}m>N)Aoyfny3FUCc06yj1uQl-)d>OSvRX7(6q& zW5f%IOczqDJf=6u-1RPu=0PyM_#@xTeVUB%%*ka~(4$hLKq&39{Kr2u&X4H)$0tqW zSG*Sf)HHohB^3$X)!*aTibtCUA*V9Cws_)@>so$l8XwD?G~aSfW>Sm4l!#YF2gfq> b&d;TL5v9^b48BW%ovHT+0G9a6qyqo|PDy8n literal 228 zcmVp@O Bureau of Economic Analysis API

[Up] [Top] -

Documentation for package ‘bea.R’ version 1.0.4

+

Documentation for package ‘bea.R’ version 1.0.6

From f6b8d799ad1c1cc064bc04cb962132bf3c084c6f Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:00:46 -0400 Subject: [PATCH 17/32] Update README.md --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5c4fd70..c0266ce 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -## Patch 1.0.5 Note: The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. +*GetParameterValuesFiltered method for list of parameters:* If your request returns the error message "The dataset requested requires parameters that were missing from the request" and the `beaParamVals()` method returns a very large number of results, [see the help request here](https://github.com/us-bea/bea.R/pull/5) for an example of how to use `beaGet()` to return a filtered list of parameters. + +*Patch 1.0.5 Note:* The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. To find the new parameters to use with TableName, use any one of the following: @@ -9,7 +11,8 @@ To find the new parameters to use with TableName, use any one of the following: beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') ``` -### Patch 1.0.2 Note: The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. +*Patch 1.0.2 Note:* The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. + # Instructions From a353bef52efd39e6446ac0bb10d7a25b131bcdce Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:01:22 -0400 Subject: [PATCH 18/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0266ce..fad272b 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ To find the new parameters to use with TableName, use any one of the following: # Instructions -Thank you for taking the time to test BEA's R library. The library is intended to make it easier to retrieve and work with BEA data. +Thank you for using BEA's R library. The library is intended to make it easier to retrieve and work with BEA data. After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). ## To Install and Load the stable, published version of the bea.R Library (recommended) From 2f44be2033523fa43af73e76132a981d1ae5e229 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:02:23 -0400 Subject: [PATCH 19/32] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fad272b..f5923b7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# Special notes + *GetParameterValuesFiltered method for list of parameters:* If your request returns the error message "The dataset requested requires parameters that were missing from the request" and the `beaParamVals()` method returns a very large number of results, [see the help request here](https://github.com/us-bea/bea.R/pull/5) for an example of how to use `beaGet()` to return a filtered list of parameters. *Patch 1.0.5 Note:* The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. From e789182e75f28df6b9a908a92bcaa2b361a68d41 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:02:50 -0400 Subject: [PATCH 20/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f5923b7..5af5423 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Special notes +# Patch/issue notes *GetParameterValuesFiltered method for list of parameters:* If your request returns the error message "The dataset requested requires parameters that were missing from the request" and the `beaParamVals()` method returns a very large number of results, [see the help request here](https://github.com/us-bea/bea.R/pull/5) for an example of how to use `beaGet()` to return a filtered list of parameters. From ff6fc77cd9c23ec2b747b8a626bd1d486ec01e75 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:38:01 -0400 Subject: [PATCH 21/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5af5423..eb8ebde 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Thank you for using BEA's R library. The library is intended to make it easier t After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). ## To Install and Load the stable, published version of the bea.R Library (recommended) - ```r + ```R install.packages('bea.R') library(bea.R) ``` From d2cddaf124ee08888ca4c1193b05a8f7d0ed18bc Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:38:17 -0400 Subject: [PATCH 22/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eb8ebde..6cbe7b6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ To find the new parameters to use with TableName, use any one of the following: - ```r + ```R beaSearch('NIPA', '[your 36-digit BEA API key]') beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') beaSearch('NIUnderlyingDetail', '[your 36-digit BEA API key]') From 6c4300c10514e29ac7570f3aafab97b346e6dd60 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:38:33 -0400 Subject: [PATCH 23/32] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6cbe7b6..ddb2a3c 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,12 @@ To find the new parameters to use with TableName, use any one of the following: - ```R +```R beaSearch('NIPA', '[your 36-digit BEA API key]') beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') beaSearch('NIUnderlyingDetail', '[your 36-digit BEA API key]') beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') - ``` +``` *Patch 1.0.2 Note:* The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. From 7f4d069d05afcb699ae568fd11e9d2d9bc726956 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Wed, 14 Mar 2018 16:39:12 -0400 Subject: [PATCH 24/32] Update README.md --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index ddb2a3c..f70062d 100644 --- a/README.md +++ b/README.md @@ -23,37 +23,37 @@ Thank you for using BEA's R library. The library is intended to make it easier t After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). ## To Install and Load the stable, published version of the bea.R Library (recommended) - ```R +```R install.packages('bea.R') library(bea.R) - ``` +``` ## To Install and Load the development version of the bea.R Library (not recommended) **Please take the following steps:** 1. Run the following line of code to install the 'httr' and 'devtools' packages: - ```r +```r install.packages(c('devtools', 'httr')) - ``` +``` 2. Load the packages listed in Step 1 using the 'library' function: - ```r +```r library(httr) library(devtools) - ``` +``` 3. Install the bea.R library from the BEA GitHub repo: - ```r +```r httr::set_config( config( ssl_verifypeer = 0L )) #zero L devtools::install_github('us-bea/bea.R') - ``` +``` 4. Load bea.R using the library function. - ```r +```r library(bea.R) - ``` +``` You are now ready to use bea.R! ## To Get Started From 3e0415ea2f45843ef47b3a64ce3f686d9ebfd0c1 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Thu, 30 Jan 2025 19:49:40 -0500 Subject: [PATCH 25/32] Update to handle modified response data structure in beaGet, general improved error handling, update search function to reflect latest changes in dataset metadata, and temporarily remove visualization function. --- .Rbuildignore | 4 + .Rd2pdf3728/Rd2.tex | 66 ++ .gitignore | 4 + DESCRIPTION | 93 +-- INDEX | 1 - NAMESPACE | 34 +- R/bea.R | 14 +- R/bea.R.rdb | Bin 22018 -> 0 bytes R/bea.R.rdx | Bin 361 -> 0 bytes R/bea2List.r | 172 ++-- R/bea2Tab.r | 381 ++++----- R/beaGet.r | 208 +++-- R/beaParamVals.r | 46 +- R/beaParams.r | 44 +- R/beaSearch.r | 866 ++++++++++---------- R/beaUpdateMetadata.r | 558 +++++++------ R/beaViz.r | 1670 -------------------------------------- R/zzz.R | 7 +- bea.R.Rproj | 23 + beaR_Manual.pdf | Bin 234700 -> 121663 bytes man/beaGet.Rd | 13 +- man/beaParamVals.Rd | 2 +- man/beaParams.Rd | 2 +- man/beaSearch.Rd | 2 +- man/beaUpdateMetadata.Rd | 2 +- man/beaViz.Rd | 32 - 26 files changed, 1322 insertions(+), 2922 deletions(-) create mode 100644 .Rbuildignore create mode 100644 .Rd2pdf3728/Rd2.tex create mode 100644 .gitignore delete mode 100644 R/bea.R.rdb delete mode 100644 R/bea.R.rdx delete mode 100644 R/beaViz.r create mode 100644 bea.R.Rproj delete mode 100644 man/beaViz.Rd diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 0000000..8679743 --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,4 @@ +^.*\.Rproj$ +^\.Rproj\.user$ +^bea\.R\.Rproj$ +^data-raw$ diff --git a/.Rd2pdf3728/Rd2.tex b/.Rd2pdf3728/Rd2.tex new file mode 100644 index 0000000..2ccc6af --- /dev/null +++ b/.Rd2pdf3728/Rd2.tex @@ -0,0 +1,66 @@ +\nonstopmode{} +\documentclass[a4paper]{book} +\usepackage[times,inconsolata,hyper]{Rd} +\usepackage{makeidx} +\makeatletter\@ifl@t@r\fmtversion{2018/04/01}{}{\usepackage[utf8]{inputenc}}\makeatother +% \usepackage{graphicx} % @USE GRAPHICX@ +\makeindex{} +\begin{document} +\chapter*{} +\begin{center} +{\textbf{\huge Package `bea.R'}} +\par\bigskip{\large \today} +\end{center} +\ifthenelse{\boolean{Rd@use@hyper}}{\hypersetup{pdftitle = {bea.R: Bureau of Economic Analysis API}}}{} +\ifthenelse{\boolean{Rd@use@hyper}}{\hypersetup{pdfauthor = {Andrea Batch}}}{} +\begin{description} +\raggedright{} +\item[Title]\AsIs{Bureau of Economic Analysis API} +\item[Version]\AsIs{1.1.0} +\item[Author]\AsIs{Andrea Batch [aut, cre], +Jeff Chen [ctb], +Walt Kampas [ctb]} +\item[Maintainer]\AsIs{Andrea Batch }\email{andrea.batch@bea.gov}\AsIs{} +\item[Depends]\AsIs{R (>= 3.2.1), +data.table} +\item[Imports]\AsIs{httr, +DT, +shiny, +jsonlite, +googleVis, +shinydashboard, +ggplot2, +stringr, +chron, +gtable, +scales, +htmltools, +httpuv, +xtable, +stringi, +magrittr, +htmlwidgets, +Rcpp, +munsell, +colorspace, +plyr, +yaml} +\item[Description]\AsIs{Provides an R interface for the Bureau of Economic Analysis (BEA) + API (see <}\url{http://www.bea.gov/API/bea_web_service_api_user_guide.htm}\AsIs{> for + more information) that serves two core purposes - +1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly + formats in the user's work space [transformation done by default in beaGet() + can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. + 2. To enable the search of descriptive meta data [beaSearch()]. + Other features of the library exist mainly as intermediate methods + or are in early stages of development. + Important Note - You must have an API key to use this library. + Register for a key at <}\url{http://www.bea.gov/API/signup/index.cfm}\AsIs{> .} +\item[URL]\AsIs{}\url{https://github.com/us-bea/bea.R}\AsIs{} +\item[License]\AsIs{CC0} +\item[LazyData]\AsIs{no} +\item[Encoding]\AsIs{UTF-8} +\item[Roxygen]\AsIs{list(markdown = TRUE)} +\item[RoxygenNote]\AsIs{7.3.2} +\end{description} +\Rdcontents{Contents} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5b6a065 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.Rproj.user +.Rhistory +.RData +.Ruserdata diff --git a/DESCRIPTION b/DESCRIPTION index 1dec2f7..fb6a5a2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,51 +1,42 @@ -Package: bea.R -Title: Bureau of Economic Analysis API -Version: 1.0.6 -Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), - email = c("Andrea.Julca@bea.gov")), - person("Jeff", "Chen", role = "ctb"), - person("Walt", "Kampas", role = "ctb")) -Author: Andrea Batch [aut, cre], - Jeff Chen [ctb], - Walt Kampas [ctb] -Depends: - R (>= 3.2.1), - data.table -Imports: - httr, - DT, - shiny, - jsonlite, - googleVis, - shinydashboard, - ggplot2, - stringr, - chron, - gtable, - scales, - htmltools, - httpuv, - xtable, - stringi, - magrittr, - htmlwidgets, - Rcpp, - munsell, - colorspace, - plyr, - yaml -Description: Provides an R interface for the Bureau of Economic Analysis (BEA) - API (see for - more information) that serves two core purposes - - 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly - formats in the user's work space [transformation done by default in beaGet() - can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. - 2. To enable the search of descriptive meta data [beaSearch()]. - Other features of the library exist mainly as intermediate methods - or are in early stages of development. - Important Note - You must have an API key to use this library. - Register for a key at . -URL: https://github.com/us-bea/bea.R -License: CC0 -LazyData: no -RoxygenNote: 6.0.1 +Package: bea.R +Title: Bureau of Economic Analysis API +Version: 1.1.0 +Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), + email = c("Andrea.Batch@bea.gov")), + person("Jeff", "Chen", role = "ctb"), + person("Walt", "Kampas", role = "ctb")) +Author: Andrea Batch [aut, cre], + Jeff Chen [ctb], + Walt Kampas [ctb] +Maintainer: Andrea Batch +Depends: + R (>= 3.2.1), + data.table +Imports: + httr, + DT, + jsonlite, + stringr, + xtable, + stringi, + magrittr, + Rcpp, + plyr, + yaml +Description: Provides an R interface for the Bureau of Economic Analysis (BEA) + API (see for + more information) that serves two core purposes - + 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly + formats in the user's work space [transformation done by default in beaGet() + can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. + 2. To enable the search of descriptive meta data [beaSearch()]. + Other features of the library exist mainly as intermediate methods + or are in early stages of development. + Important Note - You must have an API key to use this library. + Register for a key at . +URL: https://github.com/us-bea/bea.R +License: CC0 +LazyData: no +Encoding: UTF-8 +Roxygen: list(markdown = TRUE) +RoxygenNote: 7.3.2 diff --git a/INDEX b/INDEX index ef9f5f2..00d7081 100644 --- a/INDEX +++ b/INDEX @@ -12,4 +12,3 @@ beaSearch Search a selection of indexed BEA data table beaSets Returns a list of all datasets beaUpdateMetadata Download BEA metadata into library/data folder if needed -beaViz Visualize BEA API response payload diff --git a/NAMESPACE b/NAMESPACE index 43402cc..eacee88 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,20 +1,14 @@ -# Generated by roxygen2: do not edit by hand - -export(bea2List) -export(bea2Tab) -export(beaGet) -export(beaParamVals) -export(beaParams) -export(beaSearch) -export(beaSets) -export(beaUpdateMetadata) -export(beaViz) -import(data.table) -import(ggplot2) -import(googleVis) -import(httr) -import(shiny) -import(shinydashboard) -import(stringr) -importFrom(DT,datatable) -importFrom(jsonlite,fromJSON) +# Generated by roxygen2: do not edit by hand + +export(bea2List) +export(bea2Tab) +export(beaGet) +export(beaParamVals) +export(beaParams) +export(beaSearch) +export(beaSets) +export(beaUpdateMetadata) +import(data.table) +import(httr) +importFrom(DT,datatable) +importFrom(jsonlite,fromJSON) diff --git a/R/bea.R b/R/bea.R index 3b65e3c..b2ef292 100644 --- a/R/bea.R +++ b/R/bea.R @@ -16,12 +16,10 @@ # A copy of the GNU General Public License is available at # http://www.r-project.org/Licenses/ -local({ - info <- loadingNamespaceInfo() - pkg <- info$pkgname - ns <- .getNamespace(as.name(pkg)) - if (is.null(ns)) - stop("cannot find namespace environment for ", pkg, domain = NA); - dbbase <- file.path(info$libname, pkg, "R", pkg) +.onLoad <- function(libname, pkgname) { + ns <- .getNamespace(pkgname) + if (is.null(ns)) stop("cannot find namespace environment for ", pkgname, domain = NA) + + dbbase <- file.path(libname, pkgname, "R", pkgname) lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.") -}) +} \ No newline at end of file diff --git a/R/bea.R.rdb b/R/bea.R.rdb deleted file mode 100644 index c21c74743e23047ee4a9ea3e4f0e8092c74f6607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22018 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 diff --git a/R/bea.R.rdx b/R/bea.R.rdx deleted file mode 100644 index d224573abd20f00aa1cd6b300d5e29af32afe977..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmV-v0hazBiwFP!0000023?WOO2a@9$0tp!ZLL&Mk*XjbJZNdb)(_~(BE^d>g=p~> zCdp`n{UQkkeF-nVhX-%s3yF^)sFQTVZVYVx^ZO4wvpaiR0DuhWh6Wiu3fK6j3oY_m zj`Ohf!CIBPZU5tE){4UKT*j8Xy91CdOWr>LFhKGFv$iMsu+LnQTp@rZL-MJ|`Yrj) z1<1WgKHmh`_~ITMgT}4$tP5itQNY1Ue7U(oewFcN>S9QIN@PW)SKoW$=tn%HGB}O3{3<#A9u_a H$N~TW-|Dgg diff --git a/R/bea2List.r b/R/bea2List.r index 37eaff9..854b28c 100644 --- a/R/bea2List.r +++ b/R/bea2List.r @@ -1,79 +1,93 @@ -#' Convert BEA API httr response payload to list -#' -#' @param beaPayload An object with httr class 'response' from call to BEA API -#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) -#' @return An object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @import httr -#' @importFrom jsonlite fromJSON -#' @export -#' @examples -#' userSpecList <- list('UserID' = 'yourKey' , -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') -#' resp <- beaGet(userSpecList, asTable = FALSE) -#' BL <- bea2List(resp) - - -bea2List <- function(beaPayload, isMeta=FALSE) { - requireNamespace('httr', quietly = TRUE) - requireNamespace('jsonlite', quietly = TRUE) - if(class(beaPayload) != 'response'){ - warning('Submitted variable is not a valid httr response class object.') - return('Submitted variable is not a valid httr response class object.') - } - - if(floor(beaPayload$status_code/100) != 2){ - stop( - paste0('Request failed. Returned HTTP status code: ', beaPayload$status_code), - call. = FALSE - ) - } - - -#Fix later: I gave up on parsing it identically and just re-pull data as JSON - if(length(grep("resultformat=xml", beaPayload$url, ignore.case=TRUE))==1){ - beaJSON <- httr::GET( - gsub( - "resultformat=xml", - "ResultFormat=json", - beaPayload$url, - ignore.case=TRUE - ) - ) - - beaContent <- httr::content(beaJSON, as = 'text') - } - else { - beaContent <- httr::content(beaPayload, as = 'text') - } - - beaResponse <- jsonlite::fromJSON(beaContent) - - if('error' %in% tolower( - attributes( - beaResponse$BEAAPI$Results - )$names) - ){ - warning(beaResponse$BEAAPI$Results$Error$APIErrorDescription) - return(beaResponse$BEAAPI$Results) - } - - if(isMeta){ - beaList <- beaResponse$BEAAPI$Results - attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam - } else { - beaList <- beaResponse$BEAAPI$Results$Data - attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam - attributes(beaList)$detail <- beaResponse$BEAAPI$Results[( - attributes(beaResponse$BEAAPI$Results)$names != 'Data' - )] - beaList$DataValue <- as.numeric( - gsub(',', '', beaList$DataValue, fixed = TRUE) - ) - } - #Use jsonlite fromJSON f(x) to convert to list - return(beaList) -} +#' Convert BEA API httr response payload to list +#' +#' @param beaPayload An object with httr class 'response' from call to BEA API +#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) +#' @return An object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @import httr +#' @importFrom jsonlite fromJSON +#' @export +#' @examples +#' userSpecList <- list('UserID' = 'yourKey' , +#' 'Method' = 'GetData', +#' 'datasetname' = 'NIPA', +#' 'Frequency' = 'A', +#' 'TableID' = '68', +#' 'Year' = 'X') +#' resp <- beaGet(userSpecList, asTable = FALSE) +#' BL <- bea2List(resp) + + +bea2List <- function(beaPayload, isMeta=FALSE) { + requireNamespace('httr', quietly = TRUE) + requireNamespace('jsonlite', quietly = TRUE) + + if((class(beaPayload) != 'response') && (class(beaPayload) != 'character')){ + stop('Submitted variable is not a valid JSON string or httr response class object.', call.=TRUE) + } + + if(class(beaPayload) == 'response'){ + if(floor(beaPayload$status_code/100) != 2){ + stop( + paste0('Request failed. Returned HTTP status code: ', beaPayload$status_code), + call. = TRUE + ) + } + + #Never going to fix later: I gave up on parsing it identically and just re-pull data as JSON. + if(length(grep("resultformat=xml", beaPayload$url, ignore.case=TRUE))==1){ + beaJSON <- httr::GET( + gsub( + "resultformat=xml", + "ResultFormat=json", + beaPayload$url, + ignore.case=TRUE + ) + ) + + beaContent <- httr::content(beaJSON, as = 'text', encoding = 'UTF-8') + } + else { + beaContent <- httr::content(beaPayload, as = 'text', encoding = 'UTF-8') + } + } else { + beaContent <- beaPayload + } + + beaResponse <- jsonlite::fromJSON(beaContent) + if(!is.element('BEAAPI', names(beaResponse))){ + stop(paste0('The submitted request was not a valid BEA API response: ', beaContent), call.=TRUE) + } + #Handler for certain dataset responses having a different structure >:( + if(class(beaResponse$BEAAPI$Results) == 'data.frame'){ + beaResponse$BEAAPI$Results <- as.list(beaResponse$BEAAPI$Results) + beaResponse$BEAAPI$Results$Dimensions <- as.data.frame(beaResponse$BEAAPI$Results$Dimensions) + beaResponse$BEAAPI$Results$Notes <- as.data.frame(beaResponse$BEAAPI$Results$Notes) + beaResponse$BEAAPI$Results$Data <- as.data.frame(beaResponse$BEAAPI$Results$Data) + } + + if('error' %in% tolower( + attributes( + beaResponse$BEAAPI$Results + )$names) + ){ + warning(beaResponse$BEAAPI$Results$Error$APIErrorDescription) + return(beaResponse$BEAAPI$Results) + } + + if(isMeta){ + beaList <- beaResponse$BEAAPI$Results + attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam + } else { + beaList <- beaResponse$BEAAPI$Results$Data + attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam + attributes(beaList)$detail <- beaResponse$BEAAPI$Results[( + attributes(beaResponse$BEAAPI$Results)$names != 'Data' + )] + beaList$DataValue <- as.numeric( + gsub(',', '', beaList$DataValue, fixed = TRUE) + ) + } + + #Use jsonlite fromJSON f(x) to convert to list + return(beaList) +} diff --git a/R/bea2Tab.r b/R/bea2Tab.r index effe604..b02e3bb 100644 --- a/R/bea2Tab.r +++ b/R/bea2Tab.r @@ -1,190 +1,191 @@ -#' Convert BEA API httr response or list payload to data.table -#' -#' @param beaPayload An object of class 'list' or httr 'response' returned from beaGet() call to BEA API -#' @param asWide Return data.table in wide format (default: TRUE) -#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) -#' @description Convert BEA API httr response or list payload to data.table. Also, converts LONG data frame (default API format - see bea2List results) to WIDE data (with years as columns) by default -#' @return An object of class 'data.table' containing data from beaGet(...) with custom attributes(BDT)$params. -#' @import data.table -#' @export -#' @examples -#' userSpecList <- list('UserID' = 'yourKey' , -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') -#' resp <- beaGet(userSpecList) -#' BDT <- bea2Tab(resp) - -bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { - requireNamespace('data.table', quietly = TRUE) - if('response' %in% class(beaPayload)){ - beaResponse <- bea.R::bea2List(beaPayload) - } else { - beaResponse <- beaPayload - } - - if('error' %in% tolower( - attributes(beaResponse)$names - ) - ){ - return(beaResponse$Error$APIErrorDescription) - } - - DataValue <- NULL - TimePeriod <- NULL - Year <- NULL - LineNumber <- NULL - beaResults <- data.table::as.data.table(beaResponse) - attributes(beaResults)$is.wide <- FALSE - - #Some datasets use "Year" while others use "TimePeriod"; you must remove both during reshape to wide - TimeIntersect <- intersect(attributes(beaResponse)$detail$Dimensions$Name, c('TimePeriod', 'Year')) - if(length(TimeIntersect) > 1){ - TimeColName <- 'TimePeriod' - } else { - TimeColName <- TimeIntersect - } - #Convert wide matrix to long - #(less common as data comes as long, but needed for beaViz) - if('data.frame' %in% class(beaPayload)){ - if( - attributes(beaPayload)$is.wide == TRUE && - !asWide - ) { - - beaTab <- beaResults - id <- NULL - dateColNames <- sort(attributes(beaTab)$names[ - grepl( - 'DataValue_', - attributes(beaTab)$names, - fixed = TRUE - ) - ]) - - dateVector <- sort(gsub( - 'DataValue_', - '', - dateColNames - )) - - beaResults <- try(stats::reshape( - beaTab, - varying = dateColNames, - v.names = 'DataValue', - timevar = TimeColName, - times = dateVector, - direction = 'long')[, - id:=NULL - ] - ) - - if(length(TimeIntersect) > 1){ - suppressWarnings(beaResults[, Year := substr(TimePeriod, 1, 4)]) - } - - attributes(beaResults)$is.wide <- FALSE - } - } - #Convert long matrix to wide (if needed) - if( - asWide && - !is.null(attributes(beaResponse)$detail) - ){ - beaTab <- beaResults - eval(parse(text = paste0('data.table::setkey(beaTab, key = ', TimeColName, ')'))) - noDV <- attributes(beaTab)$names != 'DataValue' - noTS <- attributes(beaTab)$names != TimeIntersect - noNotes <- attributes(beaTab)$names != 'NoteRef' - - #A weird fix to push NA values down to bottom for reshaping - beaTab[, DataValue := ifelse(is.na(DataValue), 0, DataValue)] - -# beaResults <- try(stats::reshape( -# beaTab, -# timevar = 'TimePeriod', -# idvar = attributes(beaTab)$names[noDV & noTS & noNotes], -# direction = 'wide') -# ) - eval( - parse( - text=paste0( - 'beaResults <- data.table::dcast(data.table::melt(beaTab, measure = "DataValue"),', - paste( - attributes(beaTab)$names[noDV & noTS & noNotes], - collapse='+' - ), - ' ~ variable + ', TimeColName, ')' - ) - ) - ) - if( - any( - tolower( - attributes(beaResponse)$params$ParameterValue - ) %in% - c('nipa', 'niunderlyingdetail', 'fixedassets') - ) - ){ - beaResults <- beaResults[order(as.numeric(LineNumber))] - } - attributes(beaResults)$is.wide <- TRUE - if (!iTableStyle){ - beaTrans <- beaResults - - # beaStrMatrix <- t( - beaColHeaders <- - eval( - parse( - # text = paste0('beaTrans[ , .(', paste( - text = paste0('beaTrans[ , paste(', paste( - attributes(beaTrans)$names[ - !grepl('DataValue_', attributes(beaTrans)$names, fixed = T) - ], collapse = ',' - ), ')]') - ) - ) - # ) - - beaNumMatrix <- t( - eval( - parse( - text = paste0('beaTrans[ , .(', paste( - sort(attributes(beaTrans)$names[ - grepl('DataValue_', attributes(beaTrans)$names, fixed = T) - ]), collapse = ',' - ), ')]') - ) - ) - ) - - - # headRows <- data.table(beaStrMatrix) - # dataRows <- data.table(beaNumMatrix) - - # beaResults <- rbindlist(list(headRows, dataRows)) - - colnames(beaNumMatrix) <- beaColHeaders - - beaResults <- data.table(beaNumMatrix) - eval(parse(text = paste0("beaResults[, ", TimeColName, " := gsub('DataValue_', - '', attributes(beaTrans)$names[ - grepl('DataValue_', attributes(beaTrans)$names, fixed = T) - ], - fixed = TRUE - )]; - data.table::setkey(beaResults, key = ", TimeColName, ");"))) - } - } - - attributes(beaResults)$params <- attributes(beaResponse)$params - attributes(beaResults)$detail <- attributes(beaResponse)$detail - - if(is.null(attributes(beaResults)$params)){ - warning('Request response data not found; returned values may not contain successful BEA API response.') - } - - return(beaResults) -} \ No newline at end of file +#' Convert BEA API httr response or list payload to data.table +#' +#' @param beaPayload An object of class 'list' or httr 'response' returned from beaGet() call to BEA API +#' @param asWide Return data.table in wide format (default: TRUE) +#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) +#' @description Convert BEA API httr response or list payload to data.table. Also, converts LONG data frame (default API format - see bea2List results) to WIDE data (with years as columns) by default +#' @return An object of class 'data.table' containing data from beaGet(...) with custom attributes(BDT)$params. +#' @import data.table +#' @export +#' @examples +#' userSpecList <- list('UserID' = 'yourKey' , +#' 'Method' = 'GetData', +#' 'datasetname' = 'NIPA', +#' 'Frequency' = 'A', +#' 'TableID' = '68', +#' 'Year' = 'X') +#' resp <- beaGet(userSpecList) +#' BDT <- bea2Tab(resp) + +bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { + requireNamespace('data.table', quietly = TRUE) + if('response' %in% class(beaPayload)){ + beaResponse <- bea.R::bea2List(beaPayload) + } else { + beaResponse <- beaPayload + } + + if('error' %in% tolower( + attributes(beaResponse)$names + ) + ){ + warning('API response error. Please print your response payload for details.') + return(beaResponse$Error$APIErrorDescription) + } + + DataValue <- NULL + TimePeriod <- NULL + Year <- NULL + LineNumber <- NULL + beaResults <- data.table::as.data.table(beaResponse) + attributes(beaResults)$is.wide <- FALSE + + #Some datasets use "Year" while others use "TimePeriod"; you must remove both during reshape to wide + TimeIntersect <- intersect(attributes(beaResponse)$detail$Dimensions$Name, c('TimePeriod', 'Year')) + if(length(TimeIntersect) > 1){ + TimeColName <- 'TimePeriod' + } else { + TimeColName <- TimeIntersect + } + #Convert wide matrix to long + #(less common as data comes as long, but needed for beaViz) + if('data.frame' %in% class(beaPayload)){ + if( + attributes(beaPayload)$is.wide == TRUE && + !asWide + ) { + + beaTab <- beaResults + id <- NULL + dateColNames <- sort(attributes(beaTab)$names[ + grepl( + 'DataValue_', + attributes(beaTab)$names, + fixed = TRUE + ) + ]) + + dateVector <- sort(gsub( + 'DataValue_', + '', + dateColNames + )) + + beaResults <- try(stats::reshape( + beaTab, + varying = dateColNames, + v.names = 'DataValue', + timevar = TimeColName, + times = dateVector, + direction = 'long')[, + id:=NULL + ] + ) + + if(length(TimeIntersect) > 1){ + suppressWarnings(beaResults[, Year := substr(TimePeriod, 1, 4)]) + } + + attributes(beaResults)$is.wide <- FALSE + } + } + #Convert long matrix to wide (if needed) + if( + asWide && + !is.null(attributes(beaResponse)$detail) + ){ + beaTab <- beaResults + eval(parse(text = paste0('data.table::setkey(beaTab, key = ', TimeColName, ')'))) + noDV <- attributes(beaTab)$names != 'DataValue' + noTS <- attributes(beaTab)$names != TimeIntersect + noNotes <- attributes(beaTab)$names != 'NoteRef' + + #A weird fix to push NA values down to bottom for reshaping + beaTab[, DataValue := ifelse(is.na(DataValue), 0, DataValue)] + +# beaResults <- try(stats::reshape( +# beaTab, +# timevar = 'TimePeriod', +# idvar = attributes(beaTab)$names[noDV & noTS & noNotes], +# direction = 'wide') +# ) + eval( + parse( + text=paste0( + 'beaResults <- data.table::dcast(data.table::melt(beaTab, measure = "DataValue"),', + paste( + attributes(beaTab)$names[noDV & noTS & noNotes], + collapse='+' + ), + ' ~ variable + ', TimeColName, ')' + ) + ) + ) + if( + any( + tolower( + attributes(beaResponse)$params$ParameterValue + ) %in% + c('nipa', 'niunderlyingdetail', 'fixedassets') + ) + ){ + beaResults <- beaResults[order(as.numeric(LineNumber))] + } + attributes(beaResults)$is.wide <- TRUE + if (!iTableStyle){ + beaTrans <- beaResults + + # beaStrMatrix <- t( + beaColHeaders <- + eval( + parse( + # text = paste0('beaTrans[ , .(', paste( + text = paste0('beaTrans[ , paste(', paste( + attributes(beaTrans)$names[ + !grepl('DataValue_', attributes(beaTrans)$names, fixed = T) + ], collapse = ',' + ), ')]') + ) + ) + # ) + + beaNumMatrix <- t( + eval( + parse( + text = paste0('beaTrans[ , .(', paste( + sort(attributes(beaTrans)$names[ + grepl('DataValue_', attributes(beaTrans)$names, fixed = T) + ]), collapse = ',' + ), ')]') + ) + ) + ) + + + # headRows <- data.table(beaStrMatrix) + # dataRows <- data.table(beaNumMatrix) + + # beaResults <- rbindlist(list(headRows, dataRows)) + + colnames(beaNumMatrix) <- beaColHeaders + + beaResults <- data.table(beaNumMatrix) + eval(parse(text = paste0("beaResults[, ", TimeColName, " := gsub('DataValue_', + '', attributes(beaTrans)$names[ + grepl('DataValue_', attributes(beaTrans)$names, fixed = T) + ], + fixed = TRUE + )]; + data.table::setkey(beaResults, key = ", TimeColName, ");"))) + } + } + + attributes(beaResults)$params <- attributes(beaResponse)$params + attributes(beaResults)$detail <- attributes(beaResponse)$detail + + if(is.null(attributes(beaResults)$params)){ + warning('Request parameter data not found; returned values may not contain successful BEA API response.') + } + + return(beaResults) +} diff --git a/R/beaGet.r b/R/beaGet.r index d6b0187..d53d32b 100644 --- a/R/beaGet.r +++ b/R/beaGet.r @@ -1,105 +1,103 @@ -#' Pass list of user specifications (including API key) to return data from BEA API. -#' -#' @param beaSpec A list of user specifications (required). In this example, 'GetData' specifies that we want data values (rather than metadata), 'NIPA' specifies the dataset, 'A' specifies that we want annual data, 'TableID' = '68' gets a specific table, and 'X' gets all years. See BEA API documentation or use metadata methods for complete lists of parameters. -#' @param asString Return result body as a string (default: FALSE) -#' @param asList Return result body as a list (default: FALSE) -#' @param asTable Return result body as a data.table (default: TRUE) -#' @param asWide Return data.table in wide format (default: TRUE) -#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) -#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) -#' @return By default, an object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @import httr -#' @export -#' @examples -#' userSpecList <- list('UserID' = 'yourAPIKey' , -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') -#' BDT <- beaGet(userSpecList, asTable = TRUE) - -beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=TRUE, isMeta=FALSE, iTableStyle=TRUE) { -#, asTS=FALSE - if(class(beaSpec) != 'list'){ - warning('Please specify API parameters as a list. For example: - beaGet(list("UserID" = "YourKey", "Method" = "GetData", [your remaining parameters]))') - return(paste0('Invalid object class passed to beaGet([list of API parameters]): ', class(beaSpec), '. Should be of class "list"')) - } - - - - requireNamespace('httr', quietly = TRUE) - attributes(beaSpec)$names <- tolower(attributes(beaSpec)$names) - - if(class(beaSpec$userid) != 'character'){ - warning(paste0('Invalid API key of class ', class(beaSpec$userid))) - return(paste0('Invalid API key of class ', class(beaSpec$userid))) - } - - beaSpec$userid <- gsub(' ', '', beaSpec$userid, fixed=T) - - if(nchar(beaSpec$userid) != 36){ - warning(paste0('Invalid API key: ', beaSpec$userid)) - return(paste0('Invalid API key: ', beaSpec$userid)) - } - - #Parse user settings into API URL - beaUrl <- utils::URLencode( - paste0( - 'https://apps.bea.gov/api/data?UserID=', - beaSpec$userid, - '&', - paste( - paste( - attributes(beaSpec)$names[!grepl('userid', attributes(beaSpec)$names)], - beaSpec[!grepl('userid', attributes(beaSpec)$names)], - sep = '=' - ), - collapse = '&' - ), '&beaR=v1', - collapse = NULL) - ) - - #If the user just wants to return a list or table (default), use JSON - #Drop this later if we solve XML problem in section 1 - if(asTable||asList) { - #||asTS - beaUrl <- gsub( - "resultformat=xml", - "ResultFormat=json", - beaUrl, - ignore.case=TRUE - ) - } - #Use httr GET to make the API call - beaPayload <- httr::GET(beaUrl) - -#Give user format they want - #if (asTS) { - # beaResults <- bea2TS(beaPayload) - # return(beaResults) - # } - # else { - if (asTable) { - userWide <- asWide - userTabStyle <- iTableStyle - beaResults <- bea.R::bea2Tab(beaPayload, asWide = userWide, iTableStyle = userTabStyle) - return(beaResults) - } - else { - if(asList) { - metaMethod <- isMeta - beaResponse <- bea.R::bea2List(beaPayload, isMeta = metaMethod) - return(beaResponse) - } - else { - if(asString) { - beaContent <- httr::content(beaPayload, as = 'text') - return(beaContent) - } - else { return(beaPayload) } - } - } - #} -} +#' Pass list of user specifications (including API key) to return data from BEA API. +#' +#' @param beaSpec A list of user specifications (required). In this example, 'GetData' specifies that we want data values (rather than metadata), 'NIPA' specifies the dataset, 'A' specifies that we want annual data, 'TableID' = '68' gets a specific table, and 'X' gets all years. See BEA API documentation or use metadata methods for complete lists of parameters. +#' @param asString Return result body as a string (default: FALSE) +#' @param asList Return result body as a list (default: FALSE) +#' @param asTable Return result body as a data.table (default: TRUE) +#' @param asWide Return data.table in wide format (default: TRUE) +#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) +#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) +#' @return By default, an object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @import httr +#' @export +#' @examples +#' userSpecList <- list('UserID' = 'yourAPIKey' , +#' 'Method' = 'GetData', +#' 'datasetname' = 'NIPA', +#' 'Frequency' = 'A', +#' 'TableID' = '68', +#' 'Year' = 'X') +#' BDT <- beaGet(userSpecList, asTable = TRUE) + +beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=TRUE, isMeta=FALSE, iTableStyle=TRUE) { +#, asTS=FALSE + if(class(beaSpec) != 'list'){ + warning('Please specify API parameters as a list. For example: + beaGet(list("UserID" = "YourKey", "Method" = "GetData", [your remaining parameters]))') + stop(paste0('Invalid object class passed to beaGet([list of API parameters]): ', class(beaSpec), '. Should be of class "list"'), call.=TRUE) + } + + + + requireNamespace('httr', quietly = TRUE) + attributes(beaSpec)$names <- tolower(attributes(beaSpec)$names) + + if(class(beaSpec$userid) != 'character'){ + stop(paste0('Invalid API key of class ', class(beaSpec$userid)), call.=TRUE) + } + + beaSpec$userid <- gsub(' ', '', beaSpec$userid, fixed=T) + + if(nchar(beaSpec$userid) != 36){ + stop(paste0('Invalid API key: ', beaSpec$userid), call.=TRUE) + } + + #Parse user settings into API URL + beaUrl <- utils::URLencode( + paste0( + 'https://apps.bea.gov/api/data?UserID=', + beaSpec$userid, + '&', + paste( + paste( + attributes(beaSpec)$names[!grepl('userid', attributes(beaSpec)$names)], + beaSpec[!grepl('userid', attributes(beaSpec)$names)], + sep = '=' + ), + collapse = '&' + ), '&beaR=v2', + collapse = NULL) + ) + + #If the user just wants to return a list or table (default), use JSON + #Drop this later if we solve XML problem in section 1 + if(asTable||asList) { + #||asTS + beaUrl <- gsub( + "resultformat=xml", + "ResultFormat=json", + beaUrl, + ignore.case=TRUE + ) + } + #Use httr GET to make the API call + beaPayload <- httr::GET(beaUrl) + +#Give user format they want + if(asList && asString){ + warning('You have specified that you would like the data as both a list and a string. Please pick only one per request. Defaulting to string; if you have opted for a JSON response (default), you may pass this string to bea.R::bea2List([the JSON string returned by this function]) to return a list without making another API request.') + } + if(asString) { + beaContent <- httr::content(beaPayload, as = 'text', encoding = 'UTF-8') + return(beaContent) + } + else { + if(asList) { + metaMethod <- isMeta + beaResponse <- bea.R::bea2List(beaPayload, isMeta = metaMethod) + return(beaResponse) + } + else { + if(asTable) { + userWide <- asWide + userTabStyle <- iTableStyle + beaResults <- bea.R::bea2Tab(beaPayload, asWide = userWide, iTableStyle = userTabStyle) + return(beaResults) + } + else { + return(beaPayload) + } + } + } + #} +} diff --git a/R/beaParamVals.r b/R/beaParamVals.r index 07f3fa3..389bf53 100644 --- a/R/beaParamVals.r +++ b/R/beaParamVals.r @@ -1,23 +1,23 @@ -#' Gives list of values possible for a given dataset's parameters -#' -#' @param beaKey Your API key -#' @param setName Name of BEA dataset (e.g., NIPA) -#' @param paramName Name of BEA dataset parameter (e.g., TableID) -#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @keywords metadata -#' @export -#' @examples -#' beaParamVals('yourAPIkey', 'RegionalData', 'keycode') - -beaParamVals <- function(beaKey, setName, paramName) { - beaMetaSpecs <- list( - 'method' = 'GetParameterValues', - 'UserID' = beaKey, - 'datasetname'=setName, - 'ParameterName'=paramName, - 'ResultFormat' = 'json' - ) - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - return(beaResponse) -} \ No newline at end of file +#' Gives list of values possible for a given dataset's parameters +#' +#' @param beaKey Your API key +#' @param setName Name of BEA dataset (e.g., NIPA) +#' @param paramName Name of BEA dataset parameter (e.g., TableID) +#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @keywords metadata +#' @export +#' @examples +#' beaParamVals('yourAPIkey', 'NIPA', 'keycode') + +beaParamVals <- function(beaKey, setName, paramName) { + beaMetaSpecs <- list( + 'method' = 'GetParameterValues', + 'UserID' = beaKey, + 'datasetname'=setName, + 'ParameterName'=paramName, + 'ResultFormat' = 'json' + ) + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + return(beaResponse) +} diff --git a/R/beaParams.r b/R/beaParams.r index b85ac7b..41fae36 100644 --- a/R/beaParams.r +++ b/R/beaParams.r @@ -1,22 +1,22 @@ -#' Gives list of parameters possible for a given dataset -#' -#' @param beaKey Your API key -#' @param setName Name of BEA dataset (e.g., 'NIPA') -#' @keywords metadata -#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @export -#' @examples -#' beaParams('yourAPIkey', 'RegionalData') - -beaParams <- function(beaKey, setName) { - beaMetaSpecs <- list( - 'UserID' = beaKey , - 'method' = 'GetParameterList', - 'datasetname'=setName, - 'ResultFormat' = 'json' - ) - - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - return(beaResponse) -} +#' Gives list of parameters possible for a given dataset +#' +#' @param beaKey Your API key +#' @param setName Name of BEA dataset (e.g., 'NIPA') +#' @keywords metadata +#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @export +#' @examples +#' beaParams('yourAPIkey', 'NIPA') + +beaParams <- function(beaKey, setName) { + beaMetaSpecs <- list( + 'UserID' = beaKey , + 'method' = 'GetParameterList', + 'datasetname'=setName, + 'ResultFormat' = 'json' + ) + + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + return(beaResponse) +} diff --git a/R/beaSearch.r b/R/beaSearch.r index 2aa3776..8d24311 100644 --- a/R/beaSearch.r +++ b/R/beaSearch.r @@ -1,431 +1,435 @@ -#' Search a selection of indexed BEA data table names, series labels, and series codes. -#' -#' @param searchTerm A word or phrase of class 'character' to be found in BEA datasets -#' @param beaKey Character string representation of user API key. Necessary for first time use and updates; recommended for anything beyond one-off searches from the console. -#' @param asHtml Option to return results as DT markup, viewable in browser. Allows search WITHIN YOUR ALREADY-FILTERED RESULTS ONLY. Requires package 'DT' to be installed. -#' @keywords search -#' @description Searches indexed dataset table name, label, and series codes. CAUTION: Currently only works with NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets), temporarily excluding FixedAssets, and REGIONAL datasets (RegionalProduct, RegionalIncome) -#' @return An object of class 'data.table' with information about all indexed sets in which the search term was found. -#' @import data.table -#' @importFrom DT datatable -#' @export -#' @examples -#' beaSearch('gross domestic product', asHtml = TRUE) - - beaSearch <- function(searchTerm, beaKey = NULL, asHtml = FALSE){ -# beaSearch <- function(searchTerm, searchFilter = list(), justParents = FALSE, justChildren = FALSE){ - if (is.null(beaKey)){warning('Searching without specifying beaKey, e.g., - beaSearch("tobacco", beaKey = "[your 36-character API key]") -is not recommended, as the key is needed to update locally stored metadata.')} -#beaSearch throws spurious NOTEs on check() without this due to data.table Depends - 'LineDescription' <- NULL - 'SeriesCode' <- NULL - 'Key' <- NULL - 'LineNumber' <- NULL - 'Tier' <- NULL - 'ParentLine' <- NULL - 'Desc' <- NULL - 'DatasetName' <- NULL - 'Dataset' <- NULL - 'TableID' <- NULL - 'TableName' <- NULL - 'Parameter' <- NULL - 'APImtime' <- NULL - 'mtime' <- NULL - 'Account' <- NULL - '.' <- NULL - 'apiCall' <- NULL - 'nipaIndex' <- NULL - 'niudIndex' <- NULL - 'fixaIndex' <- NULL -# 'rdatIndex' <- NULL - 'rprdIndex' <- NULL - 'rincIndex' <- NULL - 'JSONUpdateDate' <- NULL - 'XMLUpdateDate' <- NULL - - requireNamespace('data.table', quietly = TRUE) - beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') - - beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); - beaMetaFilesTimes <- file.info(beaMetaFiles, extra_cols = TRUE) - beaMetaFilesTimes$Dataset <- gsub( - paste0(beaMetadataStore, '/'), - '', - attributes(beaMetaFilesTimes)$row.names, - fixed=T - ) - beaMetaMtime <- data.table::as.data.table(beaMetaFilesTimes)[, - .( - Dataset = gsub('.RData', '', Dataset, fixed=T), - mtime - ) - ] - data.table::setkey(beaMetaMtime, key = Dataset) - - #Add FixedAssets in future, but regionaldata has been merged into regionalproduct and regionalincome on the API - beaKnownMetaSets <- list( - 'nipa', - 'niunderlyingdetail', - 'fixedassets', -# 'regionaldata', - 'regionalproduct', - 'regionalincome' - ) - - if ((length(beaMetaFiles) == 0) & is.null(beaKey)){ - warning(paste0('No API key provided and no local metadata storage detected in ', beaMetadataStore, '. - Please provide a valid key to use beaSearch.')) - return(paste0('No API key provided and no local metadata storage detected in ', beaMetadataStore, '. Please provide a valid key to use beaSearch.')) - } -#Check to see if this is the first time using the search function; if so, update all metadata currently handled. - if (length(beaMetaFiles) < 5){ - #Create directory and make single call to get all metadata if there are missing meta .RData files - message('Creating first-time local copy of metadata for all datasets - only done once.') - message('Datasets will be updated only if timestamps indicate metadata obsolete in future searches,') - message("and only obsolete metadata sets will be updated (it's faster this way).") - message("") - dir.create(beaMetadataStore, showWarnings = FALSE, recursive = TRUE) - - #call function to update metadata - remember to specify beaR namespace - beaUpdateMetadata(beaKnownMetaSets, beaKey) - - } else { - if (!is.null(beaKey)){ - #Make a "GetParameterValues" call to get timestamps of latest metadata update - beaMetaTimeSpec <- list( - 'UserID' = beaKey , - 'method' = 'GetParameterValues', - 'datasetname' = 'APIDatasetMetaData', - 'parametername' = 'dataset', - 'ResultFormat' = 'json' - ) - #Get metadata response with timestamps we need to check for updates as list - beaMetaParams <- bea.R::beaGet(beaMetaTimeSpec, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - beaMetaInfo <- data.table::as.data.table(beaMetaParams$ParamValue) - - data.table::setkey(beaMetaInfo, key = Dataset) - - tryCatch({ - #If JSON has been updated, set check param = false - - timeCompare <- beaMetaMtime[beaMetaInfo][, .( - Dataset, - mtime, - APImtime = as.POSIXct( - JSONUpdateDate, - format = "%Y-%m-%dT%H:%M:%S" - ) - )][!is.na(APImtime)] - - outdatedLocalMeta <- timeCompare[ - (is.na(mtime) & !is.na(APImtime)) | - APImtime > mtime, - Dataset - ] - - beaMetaFirstToCache <- FALSE - if(length(timeCompare[is.na(APImtime) & Dataset %in% beaKnownMetaSets, Dataset]) > 0){ - beaMetaFirstToCache <- TRUE - } - }, - error = function(e){ - beaMetaFirstToCache <- TRUE - beaUpdateMetadata(beaKnownMetaSets, beaKey) - }, - finally = {''}) - - if(length(outdatedLocalMeta[!tolower(outdatedLocalMeta) %in% beaKnownMetaSets]) > 0){ - warning('BEA API contains newly-available metadata for datasets not handled. - This version of beaR is either not the latest, or will soon be replaced.') - outdatedLocalMeta <- outdatedLocalMeta[tolower(outdatedLocalMeta) %in% beaKnownMetaSets] - } - - if(beaMetaFirstToCache){ - beaUpdateMetadata(beaKnownMetaSets, beaKey) - } else { - if(length(outdatedLocalMeta) > 0){ - beaUpdateMetadata(as.list(tolower(outdatedLocalMeta)), beaKey) - } - } - } - } - - beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); - - missingNat <- FALSE; - missingReg <- FALSE; - -#Remove RegionalData, but add FixedAssets later - if( - length(grep('FixedAssets', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('NIPA', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('NIUnderlyingDetail', beaMetaFiles, fixed = TRUE)) == 0 - ){ - warning(paste0('National metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching regional metadata only.')) - missingNat <- TRUE; - } - - - if( -# length(grep('RegionalData', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('RegionalProduct', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('RegionalIncome', beaMetaFiles, fixed = TRUE)) == 0 - ){ - warning(paste0('Regional metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching national metadata only.')) - missingReg <- TRUE; -# return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) - } - - if(missingNat && missingReg){ - message(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) - return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) - } else { -#Remove RegionalData permanently, but add FixedAssets later - try({ - if(!missingNat){ - load(paste0(beaMetadataStore, '/FixedAssets.RData')) - load(paste0(beaMetadataStore, '/NIPA.RData')) - load(paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) - #Remove RegionalData, add FixedAssets later (fixaIndex) - nationalIndex <- rbindlist(list(nipaIndex, niudIndex, fixaIndex), use.names = TRUE, fill=F) - nationalIndex[, Account := 'National'] - data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) - - #Search national economic accounts for term - nPerfectMatch <- nationalIndex[ - grep( - tolower(searchTerm), - tolower( - paste( - LineDescription, - TableName, - SeriesCode, - DatasetName - ) - ), fixed=TRUE - ) - ] - - # nPerfectMatch[ , - # Parameter := NA - # ] - # nPerfectMatch[ , - # Key := NA - # ] - - nPerfectMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', 'TableName' = '", - TableID, - "', ...))" - ) - ] - - - nReasonableMatch <- nationalIndex[ - grep( - searchTerm, - paste( - LineDescription, - TableName, - SeriesCode, - DatasetName - ), ignore.case=TRUE - ) - ] - - # nReasonableMatch[ , - # Parameter := NA - # ] - # nReasonableMatch[ , - # Key := NA - # ] - - nReasonableMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', 'TableName' = '", - TableID, - "', ...))" - ) - ] - - #FixedAssets is different from NIPA and NIUnderlyingDetail; handler here - nPerfectMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] - nReasonableMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] - - - - } - - if(!missingReg){ - load(paste0(beaMetadataStore, '/RegionalProduct.RData')) - load(paste0(beaMetadataStore, '/RegionalIncome.RData')) - # load(paste0(beaMetadataStore, '/RegionalData.RData')) - - #Removed rdatIndex, which was used for RegionalData - regionalIndex <- rbindlist(list(rprdIndex, rincIndex), use.names = TRUE, fill=F) - try(regionalIndex[, Account := 'Regional']) - data.table::setkey(regionalIndex, key = DatasetName, Parameter, Key) - - - #Search regional accounts for the term - rPerfectMatch <- regionalIndex[ - grep( - tolower(searchTerm), - tolower( - paste( - Desc, - Key, - DatasetName - ) - ), fixed=TRUE - ) - ] - - # rPerfectMatch[ , - # TableID := NA - # ] - # rPerfectMatch[ , - # LineNumber := NA - # ] - # rPerfectMatch[ , - # SeriesCode := NA - # ] - # rPerfectMatch[ , - # LineDescription := NA - # ] - # rPerfectMatch[ , - # tier := NA - # ] - # rPerfectMatch[ , - # rootTabLine := NA - # ] - - - rPerfectMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', '", - Parameter, - "' = '", - Key, - "', ...))" - ) - ] - - - - rReasonableMatch <- regionalIndex[ - grep( - searchTerm, - paste( - Desc, - Key, - DatasetName - ), ignore.case=TRUE - ) - ] - - # rReasonableMatch[ , - # TableID := NA - # ] - # rReasonableMatch[ , - # LineNumber := NA - # ] - # rReasonableMatch[ , - # SeriesCode := NA - # ] - # rReasonableMatch[ , - # LineDescription := NA - # ] - # rReasonableMatch[ , - # tier := NA - # ] - # rReasonableMatch[ , - # rootTabLine := NA - # ] - - rReasonableMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', '", - Parameter, - "' = '", - Key, - "', ...))" - ) - ] - } - - #TODO: figure out how to sort list by var name s.t. it concatenates lazily instead of this if-then stuff - if(!(missingNat) && !(missingReg)){ - searchMatch <- unique( - rbindlist( - list( - # nPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # rPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # nReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # rReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)] - nPerfectMatch, - rPerfectMatch, - nReasonableMatch, - rReasonableMatch - ), - use.names = TRUE, - fill = TRUE - ) - ) - } - - if(missingNat && !(missingReg)){ - searchMatch <- unique( - rbindlist( - list( - rPerfectMatch, - rReasonableMatch - ), - use.names = TRUE, - fill = TRUE - ) - ) - } - - if(!(missingNat) && missingReg){ - searchMatch <- unique( - rbindlist( - list( - nPerfectMatch, - nReasonableMatch - ), - use.names = TRUE, - fill = TRUE - ) - ) - } - - if(requireNamespace('DT', quietly = TRUE) && asHtml == TRUE){ - requireNamespace('DT', quietly = TRUE) - searchMatch <- DT::datatable(searchMatch) - } - else{ - if (asHtml == TRUE){ - message('Note: Returning as data.table. You must have package DT installed to return browser-viewable table.') - } - } - return(searchMatch) - }) - } -} - \ No newline at end of file +#' Search a selection of indexed BEA data table names, series labels, and series codes. +#' +#' @param searchTerm A word or phrase of class 'character' to be found in BEA datasets +#' @param beaKey Character string representation of user API key. Necessary for first time use and updates; recommended for anything beyond one-off searches from the console. +#' @param asHtml Option to return results as DT markup, viewable in browser. Allows search WITHIN YOUR ALREADY-FILTERED RESULTS ONLY. Requires package 'DT' to be installed. +#' @keywords search +#' @description Searches indexed dataset table name, label, and series codes. CAUTION: Currently only searches within NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets). +#' @return An object of class 'data.table' with information about all indexed sets in which the search term was found. +#' @import data.table +#' @importFrom DT datatable +#' @export +#' @examples +#' beaSearch('gross domestic product', asHtml = TRUE) + + beaSearch <- function(searchTerm, beaKey = NULL, asHtml = FALSE){ + warning('Note: This function is currently only able to search NIPA, NIUnderlyingDetail, and FixedAssets data.') +# beaSearch <- function(searchTerm, searchFilter = list(), justParents = FALSE, justChildren = FALSE){ + if (is.null(beaKey)){warning('Searching without specifying beaKey, e.g., + beaSearch("tobacco", beaKey = "[your 36-character API key]") +is not recommended, as the key is needed to update locally stored metadata.')} +#beaSearch throws spurious NOTEs on check() without this due to data.table Depends + 'LineDescription' <- NULL + 'SeriesCode' <- NULL + 'Key' <- NULL + 'LineNumber' <- NULL + 'Tier' <- NULL + 'ParentLine' <- NULL + 'Desc' <- NULL + 'DatasetName' <- NULL + 'Dataset' <- NULL + 'TableID' <- NULL + 'TableName' <- NULL + 'Parameter' <- NULL + 'APImtime' <- NULL + 'mtime' <- NULL + 'Account' <- NULL + '.' <- NULL + 'apiCall' <- NULL + 'nipaIndex' <- NULL + 'niudIndex' <- NULL + 'fixaIndex' <- NULL +# 'rdatIndex' <- NULL + 'rprdIndex' <- NULL + 'rincIndex' <- NULL + 'JSONUpdateDate' <- NULL + 'XMLUpdateDate' <- NULL + + requireNamespace('data.table', quietly = TRUE) + beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') + + beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); + beaMetaFilesTimes <- file.info(beaMetaFiles, extra_cols = TRUE) + beaMetaFilesTimes$Dataset <- gsub( + paste0(beaMetadataStore, '/'), + '', + attributes(beaMetaFilesTimes)$row.names, + fixed=T + ) + beaMetaMtime <- data.table::as.data.table(beaMetaFilesTimes)[, + .( + Dataset = gsub('.RData', '', Dataset, fixed=T), + mtime + ) + ] + data.table::setkey(beaMetaMtime, key = Dataset) + + #Add FixedAssets in future, but regionaldata has been merged into regionalproduct and regionalincome on the API + beaKnownMetaSets <- list( + 'nipa', + 'niunderlyingdetail', + 'fixedassets' +# 'regional' #Not yet implemented +# Deprecated +# 'regionaldata', +# 'regionalproduct', +# 'regionalincome' + ) + + if ((length(beaMetaFiles) == 0) & is.null(beaKey)){ + stop(paste0('No API key provided and no local metadata storage detected in ', beaMetadataStore, '. + Please provide a valid key to use beaSearch.'), call.=TRUE) + } +#Check to see if this is the first time using the search function; if so, update all metadata currently handled. + if (length(beaMetaFiles) < 3){ + #Create directory and make single call to get all metadata if there are missing meta .RData files + message('Creating first-time local copy of metadata for all datasets.') + message('Datasets will be updated only if timestamps indicate metadata obsolete in future searches.') + #message("and only obsolete metadata sets will be updated (it's faster this way).") + message("") + dir.create(beaMetadataStore, showWarnings = FALSE, recursive = TRUE) + + #call function to update metadata - remember to specify beaR namespace + beaUpdateMetadata(beaKnownMetaSets, beaKey) + + } else { + if (!is.null(beaKey)){ + #Make a "GetParameterValues" call to get timestamps of latest metadata update + beaMetaTimeSpec <- list( + 'UserID' = beaKey , + 'method' = 'GetParameterValues', + 'datasetname' = 'APIDatasetMetaData', + 'parametername' = 'dataset', + 'ResultFormat' = 'json' + ) + #Get metadata response with timestamps we need to check for updates as list + beaMetaParams <- bea.R::beaGet(beaMetaTimeSpec, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + beaMetaInfo <- data.table::as.data.table(beaMetaParams$ParamValue) + + data.table::setkey(beaMetaInfo, key = Dataset) + + tryCatch({ + #If JSON has been updated, set check param = false + + timeCompare <- beaMetaMtime[beaMetaInfo][, .( + Dataset, + mtime, + APImtime = as.POSIXct( + JSONUpdateDate, + format = "%Y-%m-%dT%H:%M:%S" + ) + )][!is.na(APImtime)] + + outdatedLocalMeta <- timeCompare[ + (is.na(mtime) & !is.na(APImtime)) | + APImtime > mtime, + Dataset + ] + + beaMetaFirstToCache <- FALSE + if(length(timeCompare[is.na(APImtime) & Dataset %in% beaKnownMetaSets, Dataset]) > 0){ + beaMetaFirstToCache <- TRUE + } + }, + error = function(e){ + beaMetaFirstToCache <- TRUE + beaUpdateMetadata(beaKnownMetaSets, beaKey) + }, + finally = {''}) + + if(length(outdatedLocalMeta[!tolower(outdatedLocalMeta) %in% beaKnownMetaSets]) > 0){ + warning('BEA API contains newly-available metadata for datasets not handled. + This version of beaR is either not the latest, or will soon be replaced.') + outdatedLocalMeta <- outdatedLocalMeta[tolower(outdatedLocalMeta) %in% beaKnownMetaSets] + } + + if(beaMetaFirstToCache){ + beaUpdateMetadata(beaKnownMetaSets, beaKey) + } else { + if(length(outdatedLocalMeta) > 0){ + beaUpdateMetadata(as.list(tolower(outdatedLocalMeta)), beaKey) + } + } + } + } + + beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); + + missingNat <- FALSE; + missingReg <- FALSE; + +#Remove RegionalData, but add FixedAssets later + if( + length(grep('FixedAssets', beaMetaFiles, fixed = TRUE)) == 0 | + length(grep('NIPA', beaMetaFiles, fixed = TRUE)) == 0 | + length(grep('NIUnderlyingDetail', beaMetaFiles, fixed = TRUE)) == 0 + ){ + warning(paste0('National metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching regional metadata only.')) + missingNat <- TRUE; + } + + + if( + #Not yet implemented + length(grep('Regional', beaMetaFiles, fixed = TRUE)) == 0 + #Deprecated +# length(grep('RegionalData', beaMetaFiles, fixed = TRUE)) == 0 | +# length(grep('RegionalProduct', beaMetaFiles, fixed = TRUE)) == 0 | +# length(grep('RegionalIncome', beaMetaFiles, fixed = TRUE)) == 0 + ){ + #Suppress for now since it may always be missing. + #warning(paste0('Regional metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching national metadata only.')) + missingReg <- TRUE; +# return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) + } + + if(missingNat && missingReg){ + stop(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.'), call.=TRUE) + } else { +#Remove RegionalData permanently + try({ + if(!missingNat){ + load(paste0(beaMetadataStore, '/FixedAssets.RData')) + load(paste0(beaMetadataStore, '/NIPA.RData')) + load(paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) + #Remove RegionalData, add FixedAssets later (fixaIndex) + nationalIndex <- rbindlist(list(nipaIndex, niudIndex, fixaIndex), use.names = TRUE, fill=F) + nationalIndex[, Account := 'National'] + data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) + + #Search national economic accounts for term + nPerfectMatch <- nationalIndex[ + grep( + tolower(searchTerm), + tolower( + paste( + LineDescription, + TableName, + SeriesCode, + DatasetName + ) + ), fixed=TRUE + ) + ] + + # nPerfectMatch[ , + # Parameter := NA + # ] + # nPerfectMatch[ , + # Key := NA + # ] + + nPerfectMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', 'TableName' = '", + TableID, + "', ...))" + ) + ] + + + nReasonableMatch <- nationalIndex[ + grep( + searchTerm, + paste( + LineDescription, + TableName, + SeriesCode, + DatasetName + ), ignore.case=TRUE + ) + ] + + # nReasonableMatch[ , + # Parameter := NA + # ] + # nReasonableMatch[ , + # Key := NA + # ] + + nReasonableMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', 'TableName' = '", + TableID, + "', ...))" + ) + ] + + #FixedAssets is different from NIPA and NIUnderlyingDetail; handler here + nPerfectMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] + nReasonableMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] + + + + } + + if(!missingReg){ + load(paste0(beaMetadataStore, '/RegionalProduct.RData')) + load(paste0(beaMetadataStore, '/RegionalIncome.RData')) + # load(paste0(beaMetadataStore, '/RegionalData.RData')) + + #Removed rdatIndex, which was used for RegionalData + regionalIndex <- rbindlist(list(rprdIndex, rincIndex), use.names = TRUE, fill=F) + try(regionalIndex[, Account := 'Regional']) + data.table::setkey(regionalIndex, key = DatasetName, Parameter, Key) + + + #Search regional accounts for the term + rPerfectMatch <- regionalIndex[ + grep( + tolower(searchTerm), + tolower( + paste( + Desc, + Key, + DatasetName + ) + ), fixed=TRUE + ) + ] + + # rPerfectMatch[ , + # TableID := NA + # ] + # rPerfectMatch[ , + # LineNumber := NA + # ] + # rPerfectMatch[ , + # SeriesCode := NA + # ] + # rPerfectMatch[ , + # LineDescription := NA + # ] + # rPerfectMatch[ , + # tier := NA + # ] + # rPerfectMatch[ , + # rootTabLine := NA + # ] + + + rPerfectMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', '", + Parameter, + "' = '", + Key, + "', ...))" + ) + ] + + + + rReasonableMatch <- regionalIndex[ + grep( + searchTerm, + paste( + Desc, + Key, + DatasetName + ), ignore.case=TRUE + ) + ] + + # rReasonableMatch[ , + # TableID := NA + # ] + # rReasonableMatch[ , + # LineNumber := NA + # ] + # rReasonableMatch[ , + # SeriesCode := NA + # ] + # rReasonableMatch[ , + # LineDescription := NA + # ] + # rReasonableMatch[ , + # tier := NA + # ] + # rReasonableMatch[ , + # rootTabLine := NA + # ] + + rReasonableMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', '", + Parameter, + "' = '", + Key, + "', ...))" + ) + ] + } + + #TODO: figure out how to sort list by var name s.t. it concatenates lazily instead of this if-then stuff + if(!(missingNat) && !(missingReg)){ + searchMatch <- unique( + rbindlist( + list( + # nPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # rPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # nReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # rReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)] + nPerfectMatch, + rPerfectMatch, + nReasonableMatch, + rReasonableMatch + ), + use.names = TRUE, + fill = TRUE + ) + ) + } + + if(missingNat && !(missingReg)){ + searchMatch <- unique( + rbindlist( + list( + rPerfectMatch, + rReasonableMatch + ), + use.names = TRUE, + fill = TRUE + ) + ) + } + + if(!(missingNat) && missingReg){ + searchMatch <- unique( + rbindlist( + list( + nPerfectMatch, + nReasonableMatch + ), + use.names = TRUE, + fill = TRUE + ) + ) + } + + if(requireNamespace('DT', quietly = TRUE) && asHtml == TRUE){ + requireNamespace('DT', quietly = TRUE) + searchMatch <- DT::datatable(searchMatch) + } + else{ + if (asHtml == TRUE){ + message('Note: Returning as data.table. You must have package DT installed to return browser-viewable table.') + } + } + return(searchMatch) + }) + } +} diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 1bac503..30a4b71 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -1,280 +1,278 @@ -#' Download BEA metadata into library/data folder if needed -#' -#' @param datasetList list of BEA datasets to update local metadata file for (e.g., list('NIPA', 'FixedAssets')) -#' @param beaKey Your API key -#' @keywords metadata search -#' @return Nothing. This updates local .RData files to be used in beaSearch. -#' @import httr data.table -#' @importFrom jsonlite fromJSON -#' @export -#' @examples -#' beaUpdateMetadata(list('RegionalData', 'NIPA'), beaKey = 'yourAPIkey') - - -beaUpdateMetadata <- function(datasetList, beaKey){ - - 'Datasetname' <- NULL - 'MetaDataUpdated' <- NULL - 'DatasetName' <- NULL - 'TableID' <- NULL - 'Line' <- NULL - '.' <- NULL - 'SeriesCode' <- NULL - 'RowNumber' <- NULL - 'LineDescription' <- NULL - 'LineNumber' <- NULL - 'ParentLineNumber' <- NULL - 'Tier' <- NULL - 'Path' <- NULL - 'APITable' <- NULL - 'TableName' <- NULL - 'ReleaseDate' <- NULL - 'NextReleaseDate' <- NULL - 'Parameter' <- NULL - 'ParamValue' <- NULL - - #datasetList <- list('nipa','niunderlyingdetail','fixedassets','regionalproduct','regionalincome') - #update as of 2017-07-12: 'regionaldata' dataset removed from API, merged into regionalproduct and regionalincome - - requireNamespace('data.table', quietly = TRUE) - requireNamespace('httr', quietly = TRUE) - requireNamespace('jsonlite', quietly = TRUE) - - beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') - - beaMetaSpecs <- list( - 'UserID' = beaKey , - 'method' = 'GetData', - 'datasetname' = 'APIDatasetMetaData', - 'dataset' = paste(datasetList, collapse = ','), - 'ResultFormat' = 'json' - ) - - #Get as httr response - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = FALSE, asTable = FALSE, isMeta = TRUE) - - #Check to ensure it is httr response - if(class(beaResponse) != 'response'){ - warning('API metadata not returned. Verify that you are using a valid API key, represented as a character string.') - return('API metadata not returned. Verify that you are using a valid API key, represented as a character string.') - } - - lapply(datasetList, function(outdat){ - try(suppressWarnings(file.remove(paste0(beaMetadataStore,'/', outdat, '.RData'))), silent = TRUE) - }) - - - - #Get JSON String - respStr <- httr::content(beaResponse, as = 'text') - - #Actually, we can get this same info faster using GetParamValsList or something - #The line below should be suppressed if fixed - JSON was malformed due to missing commas - #respStr <- gsub('}{', '},{', respStr, fixed = TRUE) - metaList <-jsonlite::fromJSON(respStr) - metasetInfo <- data.table::as.data.table(metaList$BEAAPI$Datasets) - if(dim(metasetInfo)[1] == 0){ - warning('API metadata not returned. Verify that you are using a valid API key, represented as a character string.') - return('API metadata not returned. Verify that you are using a valid API key, represented as a character string.') - } - - #bind dataset metadata together - #This is a bit of a time drag, so we want to only do it if we need to - #And do it separately for each dataset - if('nipa' %in% tolower(datasetList)){try({ - nipaMDU <- metasetInfo[tolower(Datasetname) == 'nipa', MetaDataUpdated] - nipaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'nipa', APITable]) - nipaTabs[, DatasetName := 'NIPA'] - #TableIDN has become obsolete; we should no longer overwrite to rename - #setnames(nipaTabs, old = names(nipaTabs)[grepl('tableidn', tolower(names(nipaTabs)),fixed = T)], new = 'TableID') - #...however, there does appear to be an issue with capitalization - setnames(nipaTabs, old = names(nipaTabs)[tolower(names(nipaTabs)) == 'tableid'], new = 'TableID') - - #Backend issue: Sometimes, NIPA table 38 has a NULL table for the line descriptions. Handle and warn the user. - handler <- c() - - nipaRowList <- lapply(nipaTabs[, TableID], function(thisTab){ - tabPart <- nipaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] - tryCatch({tabPart[, TableID := thisTab]}, error = function(e){handler <<- c(handler, paste0(e, ': NIPA Table ', thisTab))}) - return(tabPart) - }) - - nipaRows <- data.table::rbindlist(nipaRowList, use.names = TRUE) - - data.table::setkey(nipaTabs, key = TableID) - data.table::setkey(nipaRows, key = TableID) - - nipaIndex <- nipaTabs[nipaRows][,.( - SeriesCode, - RowNumber, - LineDescription, - LineNumber, - ParentLineNumber, - Tier, - Path, - TableID, - DatasetName, - TableName, - ReleaseDate, - NextReleaseDate, - MetaDataUpdated = nipaMDU - )] - save(nipaIndex, file=paste0(beaMetadataStore, '/NIPA.RData')) - })} - - - if('niunderlyingdetail' %in% tolower(datasetList)){try({ - niudMDU <- metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', MetaDataUpdated] - niudTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', APITable]) - niudTabs[, DatasetName := 'NIUnderlyingDetail'] - #TableIDN has become obsolete; we should no longer overwrite to rename - #setnames(niudTabs, old = names(niudTabs)[grepl('tableidn', tolower(names(niudTabs)),fixed = T)], new = 'TableID') - #...however, there does appear to be an issue with capitalization - setnames(niudTabs, old = names(niudTabs)[tolower(names(niudTabs)) == 'tableid'], new = 'TableID') - - niudRows <- data.table::rbindlist(lapply(niudTabs[, TableID], function(thisTab){ - tabPart <- niudTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] - tabPart[, TableID := thisTab] - return(tabPart) - })) - - data.table::setkey(niudTabs, key = TableID) - data.table::setkey(niudRows, key = TableID) - - niudIndex <- niudTabs[niudRows][,.( - SeriesCode, - RowNumber, - LineDescription, - LineNumber, - ParentLineNumber, - Tier, - Path, - TableID, - DatasetName, - TableName, - ReleaseDate, - NextReleaseDate, - MetaDataUpdated = niudMDU - )] - - save(niudIndex, file=paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) - })} - - - if('fixedassets' %in% tolower(datasetList)){try({ - fixaMDU <- metasetInfo[tolower(Datasetname) == 'fixedassets', MetaDataUpdated] - fixaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'fixedassets', APITable]) - fixaTabs[, DatasetName := 'FixedAssets'] - #No TableIDN here - #setnames(fixaTabs, old = names(fixaTabs)[grepl('tableidn', tolower(names(fixaTabs)),fixed = T)], new = 'TableID') - #...however, there does appear to be an issue with capitalization - setnames(fixaTabs, old = names(fixaTabs)[tolower(names(fixaTabs)) == 'tableid'], new = 'TableID') - - fixaRows <- data.table::rbindlist(lapply(fixaTabs[, TableID], function(thisTab){ - tabPart <- fixaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] - tabPart[, TableID := thisTab] - return(tabPart) - })) - - data.table::setkey(fixaTabs, key = TableID) - data.table::setkey(fixaRows, key = TableID) - - fixaIndex <- fixaTabs[fixaRows][,.( - SeriesCode, - RowNumber, - LineDescription, - LineNumber, - ParentLineNumber, - Tier, - Path, - TableID, - DatasetName, - TableName, - ReleaseDate, - NextReleaseDate, - MetaDataUpdated = fixaMDU - )] - - save(fixaIndex, file=paste0(beaMetadataStore, '/FixedAssets.RData')) - })} - - - #Regional data: Treated differently from National data - - #Set "RegionalData" - if('regionaldata' %in% tolower(datasetList)){ - message('The RegionalData dataset has been removed from the API; please use RegionalIncome and RegionalProduct instead.'); - return('The RegionalData dataset has been removed from the API; please use RegionalIncome and RegionalProduct instead.'); -# try({ -# -# rdatMDU <- metasetInfo[tolower(Datasetname) == 'regionaldata', MetaDataUpdated] -# rdatParam <- metaList$BEAAPI$Datasets$Parameter[[grep('regionaldata', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] -# #rbindlist(rdatParam[[1]])[ParamValue != 'NULL'] -# rdatKeys <- as.data.table(rdatParam$Keycode$ParamValue[[1]]) -# rdatKeys[, Parameter := 'Keycode'] -# rdatFips <- as.data.table(rdatParam$GeoFIPS$ParamValue[[2]]) -# rdatFips[, Parameter := 'GeoFIPS'] -# -# rdatIndex <- rbindlist(list(rdatKeys, rdatFips), use.names = TRUE) -# rdatIndex[, DatasetName := 'RegionalData'] -# rdatIndex[, MetaDataUpdated := rdatMDU] -# -# save(rdatIndex, file=paste0(beaMetadataStore, '/RegionalData.RData')) -# }) - } - - #Dataset "RegionalProduct" - if('regionalproduct' %in% tolower(datasetList)){try({ - rprdMDU <- metasetInfo[tolower(Datasetname) == 'regionalproduct', MetaDataUpdated] - rprdParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalproduct', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] - rprdParNms <- attributes(rprdParams)$names - - rprdPages <- data.table::rbindlist(rprdParams)[ParamValue != 'NULL', ParamValue] - - rprdIndex <- data.table::rbindlist(lapply(1:length(rprdPages), function(x){ - rprdDT <- data.table::as.data.table(rprdPages[[x]]) - rprdDT[, Parameter := rprdParNms[x]] - return(rprdDT) - })) - - rprdIndex[, DatasetName := 'RegionalProduct'] - rprdIndex[, MetaDataUpdated := rprdMDU] - - save(rprdIndex, file=paste0(beaMetadataStore, '/RegionalProduct.RData')) - }, silent = TRUE)} - - #Dataset "RegionalIncome" - if('regionalincome' %in% tolower(datasetList)){try({ - rincMDU <- metasetInfo[tolower(Datasetname) == 'regionalincome', MetaDataUpdated] - rincParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalincome', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] - rincParNms <- attributes(rincParams)$names - - rincPages <- data.table::rbindlist(rincParams)[ParamValue != 'NULL', ParamValue] - - rincIndex <- data.table::rbindlist(lapply(1:length(rincPages), function(x){ - rincDT <- data.table::as.data.table(rincPages[[x]]) - rincDT[, Parameter := rincParNms[x]] - return(rincDT) - })) - - rincIndex[, DatasetName := 'RegionalIncome'] - rincIndex[, MetaDataUpdated := rincMDU] - - save(rincIndex, file=paste0(beaMetadataStore, '/RegionalIncome.RData')) - }, silent = TRUE)} - -# if(length(datasetList) > length(metasetInfo[, Datasetname])){ -# staleList <- datasetList[ -# !(tolower(datasetList) %in% tolower(metasetInfo[, Datasetname])) -# ] -# message('beaR attempted to update metadata for the following dataset(s) which could not be returned from the API: ') -# message(paste( -# toupper(staleList), -# collapse = ', ' -# )) -# message('Removing stale data from local storage...') -## return(staleList) -# }# else {return(list())} - - -} +#' Download BEA metadata into library/data folder if needed +#' +#' @param datasetList list of BEA datasets to update local metadata file for (e.g., list('NIPA', 'FixedAssets')) +#' @param beaKey Your API key +#' @keywords metadata search +#' @return Nothing. This updates local .RData files to be used in beaSearch. +#' @import httr data.table +#' @importFrom jsonlite fromJSON +#' @export +#' @examples +#' beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = 'yourAPIkey') + + +beaUpdateMetadata <- function(datasetList, beaKey){ + + 'Datasetname' <- NULL + 'MetaDataUpdated' <- NULL + 'DatasetName' <- NULL + 'TableID' <- NULL + 'Line' <- NULL + '.' <- NULL + 'SeriesCode' <- NULL + 'RowNumber' <- NULL + 'LineDescription' <- NULL + 'LineNumber' <- NULL + 'ParentLineNumber' <- NULL + 'Tier' <- NULL + 'Path' <- NULL + 'APITable' <- NULL + 'TableName' <- NULL + 'ReleaseDate' <- NULL + 'NextReleaseDate' <- NULL + 'Parameter' <- NULL + 'ParamValue' <- NULL + + #datasetList <- list('nipa','niunderlyingdetail','fixedassets','regionalproduct','regionalincome') + #update as of 2017-07-12: 'regionaldata' dataset removed from API, merged into regionalproduct and regionalincome + + requireNamespace('data.table', quietly = TRUE) + requireNamespace('httr', quietly = TRUE) + requireNamespace('jsonlite', quietly = TRUE) + + beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') + + beaMetaSpecs <- list( + 'UserID' = beaKey , + 'method' = 'GetData', + 'datasetname' = 'APIDatasetMetaData', + 'dataset' = paste(datasetList, collapse = ','), + 'ResultFormat' = 'json' + ) + + #Get as httr response + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = FALSE, asTable = FALSE, isMeta = TRUE) + + #Check to ensure it is httr response + if(class(beaResponse) != 'response'){ + stop('API metadata not returned. Verify that you are using a valid API key, represented as a character string.', call.=TRUE) + } + + lapply(datasetList, function(outdat){ + try(suppressWarnings(file.remove(paste0(beaMetadataStore,'/', outdat, '.RData'))), silent = TRUE) + }) + + + + #Get JSON String + respStr <- httr::content(beaResponse, as = 'text') + + #Actually, we can get this same info faster using GetParamValsList or something + #The line below should be suppressed if fixed - JSON was malformed due to missing commas + #respStr <- gsub('}{', '},{', respStr, fixed = TRUE) + metaList <-jsonlite::fromJSON(respStr) + metasetInfo <- data.table::as.data.table(metaList$BEAAPI$Datasets) + if(dim(metasetInfo)[1] == 0){ + stop('API metadata not returned. Verify that you are using a valid API key, represented as a character string.', call.=TRUE) + } + + #bind dataset metadata together + #This is a bit of a time drag, so we want to only do it if we need to + #And do it separately for each dataset + if('nipa' %in% tolower(datasetList)){try({ + nipaMDU <- metasetInfo[tolower(Datasetname) == 'nipa', MetaDataUpdated] + nipaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'nipa', APITable]) + nipaTabs[, DatasetName := 'NIPA'] + #TableIDN has become obsolete; we should no longer overwrite to rename + #setnames(nipaTabs, old = names(nipaTabs)[grepl('tableidn', tolower(names(nipaTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(nipaTabs, old = names(nipaTabs)[tolower(names(nipaTabs)) == 'tableid'], new = 'TableID') + + #Backend issue: Sometimes, NIPA table 38 has a NULL table for the line descriptions. Handle and warn the user. + handler <- c() + + nipaRowList <- lapply(nipaTabs[, TableID], function(thisTab){ + tabPart <- nipaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] + tryCatch({tabPart[, TableID := thisTab]}, error = function(e){handler <<- c(handler, paste0(e, ': NIPA Table ', thisTab))}) + return(tabPart) + }) + + nipaRows <- data.table::rbindlist(nipaRowList, use.names = TRUE) + + data.table::setkey(nipaTabs, key = TableID) + data.table::setkey(nipaRows, key = TableID) + + nipaIndex <- nipaTabs[nipaRows][,.( + SeriesCode, + RowNumber, + LineDescription, + LineNumber, + ParentLineNumber, + Tier, + Path, + TableID, + DatasetName, + TableName, + ReleaseDate, + NextReleaseDate, + MetaDataUpdated = nipaMDU + )] + save(nipaIndex, file=paste0(beaMetadataStore, '/NIPA.RData')) + })} + + + if('niunderlyingdetail' %in% tolower(datasetList)){try({ + niudMDU <- metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', MetaDataUpdated] + niudTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', APITable]) + niudTabs[, DatasetName := 'NIUnderlyingDetail'] + #TableIDN has become obsolete; we should no longer overwrite to rename + #setnames(niudTabs, old = names(niudTabs)[grepl('tableidn', tolower(names(niudTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(niudTabs, old = names(niudTabs)[tolower(names(niudTabs)) == 'tableid'], new = 'TableID') + + niudRows <- data.table::rbindlist(lapply(niudTabs[, TableID], function(thisTab){ + tabPart <- niudTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] + tabPart[, TableID := thisTab] + return(tabPart) + })) + + data.table::setkey(niudTabs, key = TableID) + data.table::setkey(niudRows, key = TableID) + + niudIndex <- niudTabs[niudRows][,.( + SeriesCode, + RowNumber, + LineDescription, + LineNumber, + ParentLineNumber, + Tier, + Path, + TableID, + DatasetName, + TableName, + ReleaseDate, + NextReleaseDate, + MetaDataUpdated = niudMDU + )] + + save(niudIndex, file=paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) + })} + + + if('fixedassets' %in% tolower(datasetList)){try({ + fixaMDU <- metasetInfo[tolower(Datasetname) == 'fixedassets', MetaDataUpdated] + fixaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'fixedassets', APITable]) + fixaTabs[, DatasetName := 'FixedAssets'] + #No TableIDN here + #setnames(fixaTabs, old = names(fixaTabs)[grepl('tableidn', tolower(names(fixaTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(fixaTabs, old = names(fixaTabs)[tolower(names(fixaTabs)) == 'tableid'], new = 'TableID') + + fixaRows <- data.table::rbindlist(lapply(fixaTabs[, TableID], function(thisTab){ + tabPart <- fixaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] + tabPart[, TableID := thisTab] + return(tabPart) + })) + + data.table::setkey(fixaTabs, key = TableID) + data.table::setkey(fixaRows, key = TableID) + + fixaIndex <- fixaTabs[fixaRows][,.( + SeriesCode, + RowNumber, + LineDescription, + LineNumber, + ParentLineNumber, + Tier, + Path, + TableID, + DatasetName, + TableName, + ReleaseDate, + NextReleaseDate, + MetaDataUpdated = fixaMDU + )] + + save(fixaIndex, file=paste0(beaMetadataStore, '/FixedAssets.RData')) + })} + + + #Regional data: Treated differently from National data + + #Set "RegionalData" + if('regionaldata' %in% tolower(datasetList)){ + warning('The RegionalData dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); +# try({ +# +# rdatMDU <- metasetInfo[tolower(Datasetname) == 'regionaldata', MetaDataUpdated] +# rdatParam <- metaList$BEAAPI$Datasets$Parameter[[grep('regionaldata', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] +# #rbindlist(rdatParam[[1]])[ParamValue != 'NULL'] +# rdatKeys <- as.data.table(rdatParam$Keycode$ParamValue[[1]]) +# rdatKeys[, Parameter := 'Keycode'] +# rdatFips <- as.data.table(rdatParam$GeoFIPS$ParamValue[[2]]) +# rdatFips[, Parameter := 'GeoFIPS'] +# +# rdatIndex <- rbindlist(list(rdatKeys, rdatFips), use.names = TRUE) +# rdatIndex[, DatasetName := 'RegionalData'] +# rdatIndex[, MetaDataUpdated := rdatMDU] +# +# save(rdatIndex, file=paste0(beaMetadataStore, '/RegionalData.RData')) +# }, silent=TRUE) + } + + #Dataset "RegionalProduct" + if('regionalproduct' %in% tolower(datasetList)){ + warning('The RegionalProduct dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); + #try({ + #rprdMDU <- metasetInfo[tolower(Datasetname) == 'regionalproduct', MetaDataUpdated] + #rprdParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalproduct', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] + #rprdParNms <- attributes(rprdParams)$names + #rprdPages <- data.table::rbindlist(rprdParams)[ParamValue != 'NULL', ParamValue] + #rprdIndex <- data.table::rbindlist(lapply(1:length(rprdPages), function(x){ + # rprdDT <- data.table::as.data.table(rprdPages[[x]]) + # rprdDT[, Parameter := rprdParNms[x]] + # return(rprdDT) + #})) + + #rprdIndex[, DatasetName := 'RegionalProduct'] + #rprdIndex[, MetaDataUpdated := rprdMDU] + #save(rprdIndex, file=paste0(beaMetadataStore, '/RegionalProduct.RData')) + #}, silent = TRUE) + } + + #Dataset "RegionalIncome" + if('regionalincome' %in% tolower(datasetList)){ + message('The RegionalIncome dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); + #try({ + #rincMDU <- metasetInfo[tolower(Datasetname) == 'regionalincome', MetaDataUpdated] + #rincParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalincome', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] + #rincParNms <- attributes(rincParams)$names + #rincPages <- data.table::rbindlist(rincParams)[ParamValue != 'NULL', ParamValue] + #rincIndex <- data.table::rbindlist(lapply(1:length(rincPages), function(x){ + # rincDT <- data.table::as.data.table(rincPages[[x]]) + # rincDT[, Parameter := rincParNms[x]] + # return(rincDT) + #})) + + #rincIndex[, DatasetName := 'RegionalIncome'] + #rincIndex[, MetaDataUpdated := rincMDU] + + # save(rincIndex, file=paste0(beaMetadataStore, '/RegionalIncome.RData')) + # }, silent = TRUE) + } + +# if(length(datasetList) > length(metasetInfo[, Datasetname])){ +# staleList <- datasetList[ +# !(tolower(datasetList) %in% tolower(metasetInfo[, Datasetname])) +# ] +# message('beaR attempted to update metadata for the following dataset(s) which could not be returned from the API: ') +# message(paste( +# toupper(staleList), +# collapse = ', ' +# )) +# message('Removing stale data from local storage...') +## return(staleList) +# }# else {return(list())} + + +} diff --git a/R/beaViz.r b/R/beaViz.r deleted file mode 100644 index 5bcb067..0000000 --- a/R/beaViz.r +++ /dev/null @@ -1,1670 +0,0 @@ -#' Visualize BEA API response payload -#' -#' @param beaPayload An httr response from call to BEA API -#' @param beaKey Your 36-digit BEA API key -#' @description When entered into the R console, the function below starts an interactive dashboard. CAUTION: Currently only works with NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAs-sets). R Studio users must opt to "show in browser" for this method to be fully functional. -#' @import data.table googleVis shiny shinydashboard ggplot2 stringr -#' @export -#' @examples -#' userSpecList <- list('UserID' = 'yourKey' , -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') -#' resp <- beaGet(userSpecList) -#' BDF <- beaViz(resp) - -beaViz <- function(beaPayload = NULL, beaKey = NULL) { - if(!requireNamespace('googleVis', quietly = TRUE)){ - stop( - 'Package googleVis needed to use beaViz.', - call. = FALSE - ) - } - - if(!requireNamespace('shinydashboard', quietly = TRUE)){ - stop( - 'Package shinydashboard needed to use beaViz.', - call. = FALSE - ) - } - - if(!requireNamespace('shiny', quietly = TRUE)){ - stop( - 'Package shiny needed to use beaViz.', - call. = FALSE - ) - } - - requireNamespace('data.table', quietly = TRUE) - requireNamespace('googleVis', quietly = TRUE) - requireNamespace('ggplot2', quietly = TRUE) - requireNamespace('shiny', quietly = TRUE) - requireNamespace('shinydashboard', quietly = TRUE) - - - #For some reason, ifelse() does not work on bea2Tab([data.table class of beaPayload]) - # and, for now, we must transform back to LONG format for beaViz. Change this later. - if(!is.null(attributes(beaPayload)$is.wide)){ - if(attributes(beaPayload)$is.wide){ - beaTab <- bea.R::bea2Tab(beaPayload, asWide = FALSE) - } else { - beaTab <- beaPayload - } - } else { - - beaTab <- ifelse( - ( - 'response' %in% class(beaPayload) || - 'list' %in% class(beaPayload) - ), - bea.R::bea2Tab(beaPayload, asWide = FALSE), - beaPayload - ) - } - - beaRespChk <- ifelse( - !is.null(attributes(beaTab)$params), - TRUE, - FALSE - ) - - if(beaRespChk) { -#so uglyyyyyy - 'LineNumber' <- NULL - '.' <- NULL - 'TimePeriod' <- NULL - 'DataValue' <- NULL - 'LineDescription' <- NULL - 'SeriesCode' <- NULL - 'TableID' <- NULL - 'DatasetName' <- NULL - 'i.LineDescription' <- NULL - 'i.LineNumber' <- NULL - 'TimePeriod' <- NULL - 'LineNumber' <- NULL - 'LineDescription' <- NULL - '.' <- NULL - 'node' <- NULL - 'root' <- NULL - 'DataValue' <- NULL - 'lnNo' <- NULL - 'size' <- NULL - 'lag1' <- NULL - 'lag2' <- NULL - 'hue' <- NULL - 'pctChgNew' <- NULL - 'pctChgOld' <- NULL - 'absz' <- NULL - 'Tier' <- NULL - 'Description' <- NULL - 'TableName' <- NULL - 'Account' <- NULL - 'ParentLineNumber' <- NULL - - message('') - message('Press "ESC" to exit the beaViz function.') - message('Note: If you are using RStudio, you will need to "Open in Browser" to view graphs/table.') - message('') - message('****You can safely ignore the following errors:****') - #beaTab <- bea.R::bea2Tab(beaList) - - #Get info about the dataset and request - thisDatasetLoc <- grep( - 'DATASETNAME', - attributes(beaTab)$params$ParameterName - ) - - thisDataset <- attributes(beaTab)$params$ParameterValue[thisDatasetLoc] - - thisUserIDLoc <- grepl( - 'USERID', - attributes(beaTab)$params$ParameterName - ) - - - thisUserID <- attributes(beaTab)$params$ParameterValue[thisUserIDLoc] - - - beaFreqCheck <- ifelse( - nchar( - beaTab[1, TimePeriod] - ) > - nchar( - gsub('M', '', beaTab[1, TimePeriod]) - ), - 'M', - ifelse( - nchar( - beaTab[1, TimePeriod] - ) > - nchar( - gsub('Q', '', beaTab[1, TimePeriod]) - ), - 'Q', - 'A' - ) - ) - - if(beaFreqCheck == 'A'){ - - dateRange <- unique( - beaTab[,as.Date(TimePeriod, format = '%Y')] - ) - } else { - if (beaFreqCheck == 'Q') { - dateRange <- unique(beaTab[, as.Date( - paste0( - substr(TimePeriod, 1, 4), - substr(paste0( - '0', - 3 * as.numeric( - substr(TimePeriod, 6, 6) - )), - nchar(paste0( - '0', - 3 * as.numeric( - substr(TimePeriod, 6, 6) - )) - )-1, - nchar(paste0( - '0', - 3 * as.numeric( - substr(TimePeriod, 6, 6) - ))) - ), - '01' - ), - format = '%Y%m%d') - ]); - } else { - dateRange <- unique(beaTab[, as.Date(paste0( - gsub('M','', - stringr::str_extract( - pattern = '([:digit:]{4})(M)([:digit:]{2})', - TimePeriod - ), - fixed = TRUE - ), '01'), - format = '%Y%m%d' - ) - ]); - } - } - - beaBar <- beaTab[ - LineNumber==1, - .( - TimePeriod, - DataPoint = as.numeric(gsub(',', '', DataValue, fixed=TRUE)) - ) - ][order(rank(TimePeriod))] - - topName <- unique(beaTab[LineNumber==1, LineDescription]) - - attributes(beaBar)$names <- c('Time Period', topName) - - thisTabIDLoc <- grep( - 'TABLEID', - attributes(beaTab)$params$ParameterName - ) - - thisTabID <- attributes(beaTab)$params$ParameterValue[thisTabIDLoc] - - nationalIndex <- bea.R::beaSearch(' ', beaKey = thisUserID)[Account == 'National'] - data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) - -#/IF NATIONAL - if(!(tolower(paste0(thisDataset, thisTabID)) %in% nationalIndex[, tolower(paste0(DatasetName, TableID))])){ - message('beaViz is not available for this dataset.') - } else { - #theseSeries <- unique(beaTab[,SeriesCode]) - hierTab <- unique( - nationalIndex[ - (TableID == thisTabID) & - (toupper(DatasetName) == toupper(thisDataset)), - TableName - ] - ) - - thisIndex <- unique( - nationalIndex[ - (TableID == thisTabID) & - (toupper(DatasetName) == toupper(thisDataset)), - ] - ) - thisIndex[LineNumber == 0, LineDescription := TableName] - data.table::setkey(thisIndex, key = LineNumber) - - thisRoots <- unique( - nationalIndex[ - (TableID == thisTabID) & -# (ParentLineNumber %in% beaTab[, LineNumber]) & - (toupper(DatasetName) == toupper(thisDataset)), - ] - ) - thisRoots[LineNumber == 0, LineDescription := TableName] - data.table::setkey(thisRoots, key = ParentLineNumber) - - hierTree <- thisIndex[thisRoots][, - .( - node = paste0( - i.LineDescription, - ' [Line ', - i.LineNumber, - ']' - ), - root = ifelse( - is.na(LineNumber), - NA, - paste0( - LineDescription, - ' [Line ', - LineNumber, - ']' - ) - ), - LineNumber = i.LineNumber - ) - ] - hierTree[root == node, root := NA] - data.table::setkey(hierTree, key=LineNumber) - - - #Get a list of possible datasets - beaAllSets <- bea.R::beaSets(thisUserID)$Dataset - - #Create list of names for select box -# setList <- as.list( -# beaAllSets$DatasetDescription -# ) - setStarter <- grepl( - toupper(thisDataset), - toupper(beaAllSets$DatasetName) - ) - - setOptions <- as.list(c( - beaAllSets$DatasetDescription[setStarter], - beaAllSets$DatasetDescription[!setStarter]) - ) - - #We can now move on to create dashboard - ui <- shinydashboard::dashboardPage( - shinydashboard::dashboardHeader(title = 'beaViz'), - shinydashboard::dashboardSidebar( - shiny::uiOutput('dataset'), -# tags$head(tags$style("#treemap{height:45vh !important;}")), -# tags$head(tags$style("#treemap{width:45vw !important;}")), -# tags$head(tags$style("#topbar{width:45vw !important;}")), -# shiny::tags$head(shiny::HTML("") -# ), - shiny::uiOutput('apiInp1'), - shiny::uiOutput('apiInp2'), - shiny::uiOutput('apiInp3'), - shiny::uiOutput('apiInp4'), - shiny::uiOutput('apiInp5'), - shiny::uiOutput('apiInp6'), - shiny::uiOutput('apiInp7'), - shiny::uiOutput('apiInp8'), - shiny::uiOutput('apiInp9'), - shiny::uiOutput('seriesbox') - #Removed with treemap - #, - #shiny::uiOutput('slidebar'), - #shiny::tags$p("Time period:"), - #shiny::verbatimTextOutput("userPd") - - #Removed prior to removal of treemap - #, - #shiny::tags$p("Possible params:"), - #shiny::verbatimTextOutput("userSetParams"), - #shiny::tags$p("Dataset:"), - #shiny::verbatimTextOutput("userSet"), - #shiny::tags$p("Series:"), - #shiny::verbatimTextOutput("userSer") - ), - shinydashboard::dashboardBody( - # Boxes need to be put in a row (or column) - shiny::fluidRow( - #shinydashboard::box(shiny::htmlOutput("treemap"), height = 300), - shinydashboard::box(shiny::htmlOutput("topbar"), height = 300), - shinydashboard::box(shiny::verbatimTextOutput("dataDetail"), height = 300), - height = 300 - ), - shiny::fluidRow( - shinydashboard::box( - shiny::downloadButton('downloadData', 'Download'), - shiny::htmlOutput("vistab"), - width = 9 - ), - shinydashboard::box( - shiny::tags$p("beaGet() call:"), - shiny::verbatimTextOutput("apiCall"), - width = 3 - ) - ) - ) - ) - - server <- function(input, output, session) { - # shiny::fluidRow( - # box( - # title = "Date Control", - #Removed with treemap -# output$slidebar <- shiny::renderUI({shiny::sliderInput("timePd", -# label = shiny::h5("Select Period:"), -# min(dateRange), -# max(dateRange), -# max(dateRange), -# step = ifelse( -# ( nchar(max(beaTab[, TimePeriod])) > -# nchar(gsub('M', '', max(beaTab[, TimePeriod]), fixed = TRUE)) -# ), -# 30.5, ifelse( -# ( nchar(max(beaTab[, TimePeriod])) > -# nchar(gsub('Q', '', max(beaTab[, TimePeriod]), fixed = TRUE)) -# ), -# 91, 364.25 -# ) -# ) -# , -# timeFormat = ifelse( -# ( nchar(max(beaTab[, TimePeriod])) > -# nchar(gsub('M', '', max(beaTab[, TimePeriod]), fixed = TRUE)) -# ), -# '%Ym%m', ifelse( -# ( nchar(max(beaTab[, TimePeriod])) > -# nchar(gsub('Q', '', max(beaTab[, TimePeriod]), fixed = TRUE)) -# ), -# '%Ym%m', '%Y' -# ) -# ) -## ) -## ) -# ) -# }) - - - output$dataset <- shiny::renderUI({ - shiny::selectInput( - "userSetname", - label = shiny::h5("Select dataset:"), - choices = setOptions, - selected = 1) - }) - - output$userSet <- shiny::renderPrint({ - input$userSetname - }) - - userSelectedSet <- shiny::reactive({ - toupper( - beaAllSets$DatasetName[ - beaAllSets$DatasetDescription == input$userSetname - ] - ) - }) - - #output$userSetParams <- shiny::reactive({ - userSetParams <- shiny::reactive({ - - theseParams <- bea.R::beaParams(thisUserID, userSelectedSet())$Parameter - - #return(str(theseParams)) - return(theseParams) - }) - - - output$apiInp1 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][1] - thisParamCode <- theseParams[[1]][1] - - allValCheck <- ifelse(is.character(theseParams$AllValue[1]), - ifelse( - nchar(theseParams$AllValue[1]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - inputGetter <- shiny::selectInput( - "apiParam1", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - output$apiInp2 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][2] - thisParamCode <- theseParams[[1]][2] - - allValCheck <- ifelse(is.character(theseParams$AllValue[2]), - ifelse( - nchar(theseParams$AllValue[2]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam2", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - output$apiInp3 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][3] - thisParamCode <- theseParams[[1]][3] - - allValCheck <- ifelse(is.character(theseParams$AllValue[3]), - ifelse( - nchar(theseParams$AllValue[3]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam3", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - output$apiInp4 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][4] - thisParamCode <- theseParams[[1]][4] - - allValCheck <- ifelse(is.character(theseParams$AllValue[4]), - ifelse( - nchar(theseParams$AllValue[4]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam4", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - - output$apiInp5 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][5] - thisParamCode <- theseParams[[1]][5] - - allValCheck <- ifelse(is.character(theseParams$AllValue[5]), - ifelse( - nchar(theseParams$AllValue[5]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam5", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - output$apiInp6 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][6] - thisParamCode <- theseParams[[1]][6] - allValCheck <- ifelse(is.character(theseParams$AllValue[6]), - ifelse( - nchar(theseParams$AllValue[6]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam6", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - output$apiInp7 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][7] - thisParamCode <- theseParams[[1]][7] - allValCheck <- ifelse(is.character(theseParams$AllValue[7]), - ifelse( - nchar(theseParams$AllValue[7]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam7", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - output$apiInp8 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][8] - thisParamCode <- theseParams[[1]][8] - allValCheck <- ifelse(is.character(theseParams$AllValue[8]), - ifelse( - nchar(theseParams$AllValue[8]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam8", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - - output$apiInp9 <- shiny::renderUI({ - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - thisParamDesc <- theseParams[[3]][9] - thisParamCode <- theseParams[[1]][9] - allValCheck <- ifelse(is.character(theseParams$AllValue[9]), - ifelse( - nchar(theseParams$AllValue[9]) > 0, - TRUE, - FALSE - ), - FALSE - ) - - - if(is.null(thisParamCode)){ - return() - } - - if(is.na(thisParamCode)){ - return() - } else { - - allParamSet <- bea.R::beaParamVals(thisUserID, selectedSet, thisParamCode)$ParamValue - if(allValCheck){ - allParamDesc <- as.list( - c(theseParams$AllValue[1], allParamSet[[1]]) - ) - attributes(allParamDesc)$names <- c('All', allParamSet[[2]]) - - } else { - allParamDesc <- as.list( - allParamSet[[1]] - ) - attributes(allParamDesc)$names <- ifelse(nchar(substr(allParamSet[[2]], 1, 35) ) < nchar(allParamSet[[2]]), paste(substr(allParamSet[[2]], 1, 35), '...'), allParamSet[[2]]) - } - - - inputGetter <- shiny::selectInput( - "apiParam8", - label = shiny::h5(paste0('Select ', tolower(thisParamDesc), ':')), - choices = allParamDesc - ) - - thisInput <- switch(selectedSet, - "REGIONALDATA" = inputGetter, - "NIPA" = inputGetter, - "NIUNDERLYINGDETAIL" = inputGetter, - "MNE" = inputGetter, - "FIXEDASSETS" = inputGetter, - "ITA" = inputGetter, - "IIP" = inputGetter, - "GDPBYINDUSTRY" = inputGetter, - "REGIONALINCOME" = inputGetter, - "REGIONALPRODUCT" = inputGetter, - "INPUTOUTPUT" = inputGetter, - "UNDERLYINGGDPBYINDUSTRY" = inputGetter - ); - - return(thisInput); - } - }) - -#Removed with treemap -# output$userPd <- shiny::renderPrint({ -# userPeriod <- ifelse( -# nchar(max(beaTab[, TimePeriod])) > -# nchar(gsub('Q', '', max(beaTab[, TimePeriod]), fixed = TRUE)), -# paste0( -# format(input$timePd, '%Y'), 'Q', -# floor((as.numeric(format(input$timePd, '%m'))+2)/3) -# ), -# ifelse( -# ( nchar(max(beaTab[, TimePeriod])) > -# nchar(gsub('M', '', max(beaTab[, TimePeriod]), fixed = TRUE)) -# ), -# format(input$timePd, '%YM%m'), format(input$timePd, '%Y') -# ) -# ) -# return(userPeriod) -# }) - - output$seriesbox <- shiny::renderUI({ - #Create list of names for select box - lineOptions <- as.list( - unique( - beaTab[order(as.numeric(LineNumber)),LineDescription] - ) - ) -# #Assign names so that select box understands - may be bad? -# attributes(lineOptions)$names <- paste0( -# 'Choice ', -# seq(1, length(lineOptions))) - shiny::selectInput( - "userSeries", - label = shiny::h5("Select series:"), - choices = lineOptions, - selected = 1 - ) - }) - - output$userSer <- shiny::renderPrint({ - input$userSeries - }) - -####Treemap section suppressed - Misleading -## output$treemap <- googleVis::renderGvis({ -## #output$treemap <- shiny::renderPlot({ -## #Get latest datapoint for each series within context of user specs -## userPeriod <- ifelse( -## nchar(max(beaTab[, TimePeriod])) > -## nchar(gsub('Q', '', max(beaTab[, TimePeriod]), fixed = TRUE)), -## paste0( -## format(input$timePd, '%Y'), 'Q', -## floor((as.numeric(format(input$timePd, '%m'))+1)/3) -## ), -## ifelse( -## ( nchar(max(beaTab[, TimePeriod])) > -## nchar(gsub('M', '', max(beaTab[, TimePeriod]), fixed = TRUE)) -## ), -## format(input$timePd, '%YM%m'), format(input$timePd, '%Y') -## ) -## ) -## -## latestTime <- ifelse( -## nchar(userPeriod) < 4, -## max(beaTab[, TimePeriod]), -## userPeriod -## ) -## latestVals <- beaTab[TimePeriod == latestTime] -## data.table::setkey(latestVals, key='LineNumber') -## -## #Get previous period's datapoint -## latestTlag <- max(beaTab[TimePeriod < latestTime, TimePeriod]) -## latestVlag <- beaTab[TimePeriod == latestTlag] -## data.table::setkey(latestVlag, key='LineNumber') -## -## #Create treemap using latest levels for size, change in pct chg for color -## tmVal <- hierTree[latestVals][, -## .(node, -## root, -## size = as.numeric(gsub(',', '', DataValue, fixed = TRUE)), -## lnNo = LineNumber -## ) -## ] -## -## root0chk <- tmVal[grep(' [Line 0]', root, fixed=T), root] -## #Special handler for "line 0" -## if(length(root0chk) > 0){ -## -## root0topV <- data.table::as.data.table( -## list( -## 'lnNo' = '0', -## 'node' = unique(root0chk), -## 'root' = NA, -## 'size' = 1 -## ) -## ) -## root0topL1 <- data.table::as.data.table( -## list( -## 'lnNo' = '0', -## 'node' = unique(root0chk), -## 'root' = NA, -## 'size' = 1, -## 'lag1' = 1 -## ) -## ) -## root0topL2 <- data.table::as.data.table( -## list( -## 'lnNo' = '0', -## 'node' = unique(root0chk), -## 'root' = NA, -## 'size' = 1, -## 'lag1' = 1, -## 'lag2' = 1 -## ) -## ) -## -## -## -## tmVal <- data.table::rbindlist( -## list( -## tmVal, -## root0topV -## ), -## use.names = TRUE -## ) -## -## -## } -## -## data.table::setkey(tmVal, key = lnNo) -## -## if(length(unique(beaTab[,TimePeriod])) >= 3) { -## #Get period before previous datapoint -## secondTlag <- max(beaTab[TimePeriod < latestTlag, TimePeriod]) -## secondVlag <- beaTab[TimePeriod == secondTlag] -## data.table::setkey(secondVlag, key='LineNumber') -## -## tmLag1 <- tmVal[latestVlag][, -## .(lnNo, node, root, size, -## lag1 = as.numeric(gsub(',','', DataValue, fixed = TRUE)) -## ) -## ] -## -## tmLag2 <- tmLag1[secondVlag][, -## .(lnNo, node, root, size, lag1, -## lag2 = as.numeric(gsub(',','', DataValue, fixed = TRUE)) -## ) -## ] -## -## if(length(root0chk) > 0){ -## tmLag1 <- data.table::rbindlist( -## list( -## tmLag1, -## root0topL1 -## ), -## use.names = TRUE -## ) -## -## tmLag2 <- data.table::rbindlist( -## list( -## tmLag2, -## root0topL2 -## ), -## use.names = TRUE -## ) -## } -## -## data.table::setkey(tmLag1, key = lnNo) -## data.table::setkey(tmLag2, key = lnNo) -## -## -## tmDT <- tmLag2[ -## !is.na(lnNo) & -## ( -## !(node %in% tmLag2[ -## !(root %in% tmLag2[, node]), -## node -## ] -## ) | ( -## lnNo == 1 | lnNo == 0 -## ) -## ), -## .(lnNo, node, root, size, lag1, lag2, -## pctChgNew = (size / lag1) - 1, -## pctChgOld = (lag1 / lag2) - 1 -## ) -## ] -## } else { -## if(length(unique(beaTab[,TimePeriod])) == 2) { -## tmLag1 <- tmVal[latestVlag][, -## .(lnNo, node, root, size, -## lag1 = as.numeric(gsub(',','', DataValue, fixed = TRUE)) -## ) -## ] -## -## #Special handler for "line 0" -## if(length(root0chk) > 0){ -## tmLag1 <- data.table::rbindlist( -## list( -## tmLag1, -## root0topL1 -## ), -## use.names = TRUE -## ) -## } -## data.table::setkey(tmLag1, key = lnNo) -## -## tmDT <- tmLag1[ -## !is.na(lnNo) & -## ( -## !(node %in% tmLag1[ -## !(root %in% tmLag1[, node]), -## node -## ] -## ) | ( -## lnNo == 1 | lnNo == 0 -## ) -## ), -## .(lnNo, node, root, size, lag1, -## pctChgNew = size, -## pctChgOld = lag1 -## ) -## ] -## } else { -## tmDT <- tmVal[ -## !is.na(lnNo) & -## ( -## !(node %in% tmVal[ -## !(root %in% tmVal[, node]), -## node -## ] -## ) | ( -## lnNo == 1 | lnNo == 0 -## ) -## ), -## .(lnNo, node, root, size, -## pctChgNew = size, -## pctChgOld = 0 -## ) -## ] -## } -## } -## -## -## #Special hue when node is changed from row 1 in sidebar -## if(input$userSeries != unique(beaTab[LineNumber == 1, LineDescription]) -## ) { -## tmDT[!is.na(node), hue := -## ifelse( -## (node == paste0(input$userSeries, ' [Line ', lnNo, ']')) -## , -## 1, ifelse(!is.na(root) & -## substr( -## root, -## 1, -## regexpr(' [Line ', root, fixed=TRUE)-1 -## ) == input$userSeries, -## 0.1, -## -1 -## ) -## ) -## ] -## } else { -## tmDT[!is.na(node), hue := -## ifelse( -## (pctChgNew - pctChgOld) > 0, -## ifelse( -## pctChgNew > 0, -## ifelse( -## pctChgOld < 0, 3, 2 -## ), 1 -## ), -## ifelse( -## (pctChgNew - pctChgOld) > 0, -## ifelse( -## pctChgNew < 0, -## ifelse( -## pctChgOld > 0, -3, -2 -## ), -1 -## ), 0 -## ) -## ) -## ] -## } -## -## -## tmDT[, absz := abs(size)] -## #tmDT[root == ' [Line 0]', root := ''] -## -## #Convert treemap data.table to data.frame, eliminate empty nodes -## tmDF <- as.data.frame(tmDT[!is.na(node)]) -## -## maxTiers <- max( -## as.numeric( -## unique( -## thisIndex[ -## as.numeric(LineNumber) %in% -## as.numeric(beaTab[LineDescription == input$userSeries, LineNumber] -## ), -## Tier -## ]) -## ) -## ) -## session$clientData$output_treemap_width -## -## Tree <- googleVis::gvisTreeMap(tmDF, -## idvar = 'node', -## parentvar = 'root', -## sizevar = 'absz', -## colorvar = 'hue', -## options = list( -## title = paste0(hierTab, ' [relative levels]'), -### titleTextStyle = '{fontSize:9}', -### maxDepth = 1, -### maxPostDepth = maxTiers, -## maxDepth = ifelse(is.character(input$userSeries), -## ifelse(maxTiers > 1, maxTiers-1, 1), -## 1 -## ), -## minColor = ifelse(is.character(input$userSeries), -## ifelse( -## input$userSeries != unique(beaTab[LineNumber == 1, LineDescription]), -## '#ababab', '#990000' -## ), -## '#990000'), -## midColor = '#ffffcc', -## maxColor = ifelse(is.character(input$userSeries), -## ifelse( -## input$userSeries != unique(beaTab[LineNumber == 1, LineDescription]), -## '#0a5eff', '#339933' -## ), -## '#339933'), -## headerHeight = 15, -## fontColor = 'black', -## showScale = FALSE, -## highlightOnMouseOver = TRUE, -### width = 'floor(0.15 * screen.width);', -## width = '100%', -### width = 'gvisWidths', -## height = 275 -## ) -## ) -## return(Tree) -## }) - - output$topbar <- googleVis::renderGvis({ - session$clientData$output_topbar_width - - beaBar <- beaTab[ - LineDescription==input$userSeries, - .( - TimePeriod, - DataPoint = as.numeric(gsub(',', '', DataValue, fixed=TRUE)) - ) - ][order(rank(TimePeriod))] - - topName <- unique(beaTab[LineDescription == input$userSeries, LineDescription]) - - attributes(beaBar)$names <- c('Time Period', topName) - - Bar <- googleVis::gvisSteppedAreaChart( - beaBar, - xvar='Time Period', - yvar=topName, - options=list( - isStacked=TRUE, - height = 275, -# width = 'floor(0.15 * screen.width);', - width = '100%', -# width = 'gvisWidths', - legend = 'none', - title = topName, - vAxis = '{}' - ) - ) - return(Bar) - }) - - output$vistab <- googleVis::renderGvis({ - preTab <- try(as.data.frame( - bea.R::bea2Tab(beaTab, asWide = TRUE)[ - order( - as.numeric( - LineNumber - ) - ) - ] - ), silent = TRUE) - - ptNames <- names(preTab) - - ptnClean <- gsub('DataValue_', '', ptNames, fixed = TRUE) - ptnClean <- gsub('CL_UNIT', 'Units', ptnClean, fixed = TRUE) - ptnClean <- gsub('UNIT_MULT', 'Multiplier', ptnClean, fixed = TRUE) - - names(preTab) <- ptnClean - - vTab <- googleVis::gvisTable( - preTab, - options=list( -# title = hierTab, - page='enable', - height='automatic', - width='automatic') - ) - return(vTab) - }) - - output$dataDetail <- shiny::renderText({ - beaTabDets <- attributes(beaPayload)$detail - beaTabList <- lapply( - attributes(beaTabDets)$names, - function(thisAtr){ - if(class(beaTabDets[[thisAtr]]) == 'character'){ - beaTabElem <- beaTabDets[[thisAtr]] - } else { - #Add exception for notes - if(thisAtr == 'Notes') { - beaTabElem <- paste(beaTabDets$Notes$NoteText, collapse = "\n") - } else{ - beaElemDets <- attributes(beaTabDets[[thisAtr]]) - beaTabElem <- paste(lapply(beaElemDets$names, function(thisElem){ - return(paste0(thisElem, ': ', beaTabDets[[thisAtr]][[thisElem]])) - }), collapse = "\n") - } - } - - if(thisAtr != 'Dimensions'){ - if(tolower(thisAtr) %in% c('statistic', 'utcproductiontime')){ - return(paste0(thisAtr, ": ", beaTabElem)) - } else { - return(paste0(thisAtr, ": \n", beaTabElem)) - } - } else { - return('') - } - - }) - detailStr <- paste(beaTabList, collapse = "\n") - return(detailStr) - }) - -# output$apiCall <- shiny::renderPrint({ - output$apiCall <- shiny::renderText({ - #' userSpecList <- list('UserID' = 'yourKey' , -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') - - selectedSet <- userSelectedSet() - theseParams <- userSetParams() - - userDefPrms <- theseParams$ParameterName[ - !( - nchar(theseParams$AllValue) > 0 & - is.character(theseParams$AllValue) - ) - ] - - - allValsPrms <- theseParams$ParameterName[ - ( - nchar(theseParams$AllValue) > 0 & - is.character(theseParams$AllValue) - ) - ] - - allValsSetr <- theseParams$AllValue[ - ( - nchar(theseParams$AllValue) > 0 & - is.character(theseParams$AllValue) - ) - ] - - allValsPrms <- ifelse(is.null(allValsPrms), c(NA, NA), allValsPrms) - allValsSetr <- ifelse(is.null(allValsSetr), c(NA, NA), allValsSetr) - - paramDescs <- sapply(1:length(userDefPrms), function(x){ - apiInStr <- paste0('input$apiParam', x); - apiDesc <- apiInStr #eval(parse(apiInStr)); - return(apiDesc); - }) - - paramAttrs <- sapply(1:length(userDefPrms), function(x){ - apiInStr <- paste0('attributes(input$apiParam', x, ')'); - apiAttr <- apiInStr #eval(parse(apiInStr)); - return(apiAttr); - }) - - specStr <- paste0("beaData <- bea.R::beaGet( \n list(\n 'UserID' = '", thisUserID, "', \n 'Method' = 'GetData', \n 'DatasetName' = '", selectedSet,"'", - ifelse( - !is.null(userDefPrms[1]), - ifelse(!is.na(userDefPrms[1]), - paste0(", \n '", userDefPrms[1], "' = '", input$apiParam1,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[2]), - ifelse( - !is.na(userDefPrms[2]), - paste0(", \n '", userDefPrms[2], "' = '", input$apiParam2,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[3]), - ifelse( - !is.na(userDefPrms[3]), - paste0(", \n '", userDefPrms[3], "' = '", input$apiParam3,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[4]), - ifelse( - !is.na(userDefPrms[4]), - paste0(", \n '", userDefPrms[4], "' = '", input$apiParam4,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[5]), - ifelse( - !is.na(userDefPrms[5]), - paste0(", \n '", userDefPrms[5], "' = '", input$apiParam5,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[6]), - ifelse( - !is.na(userDefPrms[6]), - paste0(", \n '", userDefPrms[6], "' = '", input$apiParam6,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[7]), - ifelse( - !is.na(userDefPrms[7]), - paste0(", \n '", userDefPrms[7], "' = '", input$apiParam7,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[8]), - ifelse( - !is.na(userDefPrms[8]), - paste0(", \n '", userDefPrms[8], "' = '", input$apiParam8,"'"), - ""), "" - ), - ifelse( - !is.null(userDefPrms[9]), - ifelse( - !is.na(userDefPrms[9]), - paste0(", \n '", userDefPrms[9], "' = '", input$apiParam9,"'"), - ""), "" - ), - ifelse( - !is.null(allValsPrms[1]), - ifelse( - !is.na(allValsPrms[1]), - paste0(", \n '", allValsPrms[1], "' = '", allValsSetr[1],"'"), - ""), "" - ), - ifelse( - !is.null(allValsPrms[2]), - ifelse( - !is.na(allValsPrms[2]), - paste0(", \n '", allValsPrms[2], "' = '", allValsSetr[2],"'"), - ""), "" - ), - ifelse( - !is.null(allValsPrms[3]), - ifelse( - !is.na(allValsPrms[3]), - paste0(", \n '", allValsPrms[3], "' = '", allValsSetr[3],"'"), - ""), "" - ), - ifelse( - !is.null(allValsPrms[4]), - ifelse( - !is.na(allValsPrms[4]), - paste0(", \n '", allValsPrms[4], "' = '", allValsSetr[4],"'"), - ""), "" - ), - ifelse( - !is.null(allValsPrms[5]), - ifelse( - !is.na(allValsPrms[5]), - paste0(", \n '", allValsPrms[5], "' = '", allValsSetr[5],"'"), - ""), "" - ), - ifelse( - !is.null(allValsPrms[6]), - ifelse( - !is.na(allValsPrms[6]), - paste0(", \n '", allValsPrms[6], "' = '", allValsSetr[6],"'"), - ""), "" - ), - ifelse( - !is.null(allValsPrms[7]), - ifelse( - !is.na(allValsPrms[7]), - paste0(", \n '", allValsPrms[7], "' = '", allValsSetr[7],"'"), - ""), "" - ), - "))" - ) - - #return(writeLines(specStr)) - return(specStr) - - }) - - output$downloadData <- downloadHandler( - filename = function() { paste( - userSelectedSet(), - input$apiParam1, - input$apiParam2, - input$apiParam3, - input$apiParam4, - input$apiParam5, - input$apiParam6, - input$apiParam7, - input$apiParam8, - input$apiParam9, - '.csv', sep='') }, - content = function(file) { - utils::write.csv(bea.R::bea2Tab(beaTab, asWide = TRUE)[ - order( - as.numeric( - LineNumber - ) - ) - ], file - ) - } - ) - - } - - suppressWarnings(shiny::shinyApp(ui, server)) - - - #if(length(unique(hierTree[, nodeID])) > unique(tmFnl[,nodeID])){ - # warning('Some rows of this data table may be missing from treemap.') - #} - } - } else{ - warning("Error in API response. Returning error information.") - return(beaTab) - } -} diff --git a/R/zzz.R b/R/zzz.R index 93dbbbf..d47e95b 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,3 +1,4 @@ -.onLoad <- function(lib, pkg) { - packageStartupMessage("Note: As of February 2018, beaGet() requires 'TableName' for NIPA and NIUnderlyingDetail data instead of 'TableID.' See https://github.us-bea/bea.R for details.") -} +.onLoad <- function(lib, pkg) { + packageStartupMessage("Note 1: As of February 2018, beaGet() requires 'TableName' for NIPA and NIUnderlyingDetail data instead of 'TableID.' See https://github.us-bea/bea.R for details.") + packageStartupMessage("Note 2: The BEA API no longer releases regional data under the RegionalData, RegionalIncome, or RegionalProduct dataset names; please use 'DatasetName'='Regional' for regional data instead.") +} diff --git a/bea.R.Rproj b/bea.R.Rproj new file mode 100644 index 0000000..09ef544 --- /dev/null +++ b/bea.R.Rproj @@ -0,0 +1,23 @@ +Version: 1.0 +ProjectId: 773d3faa-07bc-4169-850c-485cb5b2c3c1 + +RestoreWorkspace: No +SaveWorkspace: No +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX + +AutoAppendNewline: Yes +StripTrailingWhitespace: Yes +LineEndingConversion: Posix + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace diff --git a/beaR_Manual.pdf b/beaR_Manual.pdf index 4cc55b3c3eb89453d667ce26a1072e346882da53..69bcadbc56bd4dab93595ab3046dc0380bc0da79 100644 GIT binary patch delta 100124 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 literal 234700 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�LDr`T|`cYD9+p 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%0AJtvhW#e1{-SFT))ZGcMO7c)wz+} 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�K^|`rQ|Tc~yUe@< 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

2K-=;puzNNePx!|()d)d>M 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 Date: Thu, 30 Jan 2025 20:39:38 -0500 Subject: [PATCH 26/32] Clean up a little. --- .Rd2pdf3728/Rd2.tex | 66 -------------------------------------------- DESCRIPTION | 11 ++------ beaR_Manual.pdf | Bin 121663 -> 121747 bytes 3 files changed, 2 insertions(+), 75 deletions(-) delete mode 100644 .Rd2pdf3728/Rd2.tex diff --git a/.Rd2pdf3728/Rd2.tex b/.Rd2pdf3728/Rd2.tex deleted file mode 100644 index 2ccc6af..0000000 --- a/.Rd2pdf3728/Rd2.tex +++ /dev/null @@ -1,66 +0,0 @@ -\nonstopmode{} -\documentclass[a4paper]{book} -\usepackage[times,inconsolata,hyper]{Rd} -\usepackage{makeidx} -\makeatletter\@ifl@t@r\fmtversion{2018/04/01}{}{\usepackage[utf8]{inputenc}}\makeatother -% \usepackage{graphicx} % @USE GRAPHICX@ -\makeindex{} -\begin{document} -\chapter*{} -\begin{center} -{\textbf{\huge Package `bea.R'}} -\par\bigskip{\large \today} -\end{center} -\ifthenelse{\boolean{Rd@use@hyper}}{\hypersetup{pdftitle = {bea.R: Bureau of Economic Analysis API}}}{} -\ifthenelse{\boolean{Rd@use@hyper}}{\hypersetup{pdfauthor = {Andrea Batch}}}{} -\begin{description} -\raggedright{} -\item[Title]\AsIs{Bureau of Economic Analysis API} -\item[Version]\AsIs{1.1.0} -\item[Author]\AsIs{Andrea Batch [aut, cre], -Jeff Chen [ctb], -Walt Kampas [ctb]} -\item[Maintainer]\AsIs{Andrea Batch }\email{andrea.batch@bea.gov}\AsIs{} -\item[Depends]\AsIs{R (>= 3.2.1), -data.table} -\item[Imports]\AsIs{httr, -DT, -shiny, -jsonlite, -googleVis, -shinydashboard, -ggplot2, -stringr, -chron, -gtable, -scales, -htmltools, -httpuv, -xtable, -stringi, -magrittr, -htmlwidgets, -Rcpp, -munsell, -colorspace, -plyr, -yaml} -\item[Description]\AsIs{Provides an R interface for the Bureau of Economic Analysis (BEA) - API (see <}\url{http://www.bea.gov/API/bea_web_service_api_user_guide.htm}\AsIs{> for - more information) that serves two core purposes - -1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly - formats in the user's work space [transformation done by default in beaGet() - can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. - 2. To enable the search of descriptive meta data [beaSearch()]. - Other features of the library exist mainly as intermediate methods - or are in early stages of development. - Important Note - You must have an API key to use this library. - Register for a key at <}\url{http://www.bea.gov/API/signup/index.cfm}\AsIs{> .} -\item[URL]\AsIs{}\url{https://github.com/us-bea/bea.R}\AsIs{} -\item[License]\AsIs{CC0} -\item[LazyData]\AsIs{no} -\item[Encoding]\AsIs{UTF-8} -\item[Roxygen]\AsIs{list(markdown = TRUE)} -\item[RoxygenNote]\AsIs{7.3.2} -\end{description} -\Rdcontents{Contents} diff --git a/DESCRIPTION b/DESCRIPTION index fb6a5a2..fa068e9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -8,21 +8,14 @@ Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), Author: Andrea Batch [aut, cre], Jeff Chen [ctb], Walt Kampas [ctb] -Maintainer: Andrea Batch +Maintainer: Andrea Batch Depends: R (>= 3.2.1), data.table Imports: httr, DT, - jsonlite, - stringr, - xtable, - stringi, - magrittr, - Rcpp, - plyr, - yaml + jsonlite Description: Provides an R interface for the Bureau of Economic Analysis (BEA) API (see for more information) that serves two core purposes - diff --git a/beaR_Manual.pdf b/beaR_Manual.pdf index 69bcadbc56bd4dab93595ab3046dc0380bc0da79..f7eb9e172b1bdec23753e7c9cadcc143325c4415 100644 GIT binary patch delta 25257 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 Glm7>3RmUIz delta 25115 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 Hs>lC-olka% From ff8e766cea48955616a96aabe6bc91d9ce9ea130 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Thu, 30 Jan 2025 21:17:57 -0500 Subject: [PATCH 27/32] Update documentation. --- R/bea2List.r | 4 +- R/bea2Tab.r | 4 +- R/beaGet.r | 4 +- R/beaParamVals.r | 4 +- R/beaParams.r | 4 +- R/beaSearch.r | 4 +- R/beaSets.r | 44 +++++------ R/beaUpdateMetadata.r | 4 +- README.md | 156 --------------------------------------- beaR_Manual.pdf | Bin 121747 -> 0 bytes beaR_instructions.pdf | Bin 14055 -> 0 bytes man/bea2List.Rd | 4 +- man/bea2Tab.Rd | 4 +- man/beaGet.Rd | 4 +- man/beaParamVals.Rd | 4 +- man/beaParams.Rd | 4 +- man/beaSearch.Rd | 4 +- man/beaSets.Rd | 4 +- man/beaUpdateMetadata.Rd | 4 +- 19 files changed, 60 insertions(+), 200 deletions(-) delete mode 100644 README.md delete mode 100644 beaR_Manual.pdf delete mode 100644 beaR_instructions.pdf diff --git a/R/bea2List.r b/R/bea2List.r index 854b28c..9d06fee 100644 --- a/R/bea2List.r +++ b/R/bea2List.r @@ -6,8 +6,8 @@ #' @import httr #' @importFrom jsonlite fromJSON #' @export -#' @examples -#' userSpecList <- list('UserID' = 'yourKey' , +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), #' 'Method' = 'GetData', #' 'datasetname' = 'NIPA', #' 'Frequency' = 'A', diff --git a/R/bea2Tab.r b/R/bea2Tab.r index b02e3bb..3841da8 100644 --- a/R/bea2Tab.r +++ b/R/bea2Tab.r @@ -7,8 +7,8 @@ #' @return An object of class 'data.table' containing data from beaGet(...) with custom attributes(BDT)$params. #' @import data.table #' @export -#' @examples -#' userSpecList <- list('UserID' = 'yourKey' , +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), #' 'Method' = 'GetData', #' 'datasetname' = 'NIPA', #' 'Frequency' = 'A', diff --git a/R/beaGet.r b/R/beaGet.r index d53d32b..dd9e6d9 100644 --- a/R/beaGet.r +++ b/R/beaGet.r @@ -10,8 +10,8 @@ #' @return By default, an object of class 'list' of several dimensions. View list structure using 'str(yourList)'. #' @import httr #' @export -#' @examples -#' userSpecList <- list('UserID' = 'yourAPIKey' , +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), #' 'Method' = 'GetData', #' 'datasetname' = 'NIPA', #' 'Frequency' = 'A', diff --git a/R/beaParamVals.r b/R/beaParamVals.r index 389bf53..6a24f28 100644 --- a/R/beaParamVals.r +++ b/R/beaParamVals.r @@ -6,8 +6,8 @@ #' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. #' @keywords metadata #' @export -#' @examples -#' beaParamVals('yourAPIkey', 'NIPA', 'keycode') +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'keycode') beaParamVals <- function(beaKey, setName, paramName) { beaMetaSpecs <- list( diff --git a/R/beaParams.r b/R/beaParams.r index 41fae36..c377ea6 100644 --- a/R/beaParams.r +++ b/R/beaParams.r @@ -5,8 +5,8 @@ #' @keywords metadata #' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. #' @export -#' @examples -#' beaParams('yourAPIkey', 'NIPA') +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaParams(Sys.getenv("BEA_API_KEY"), 'NIPA') beaParams <- function(beaKey, setName) { beaMetaSpecs <- list( diff --git a/R/beaSearch.r b/R/beaSearch.r index 8d24311..de76cf5 100644 --- a/R/beaSearch.r +++ b/R/beaSearch.r @@ -9,8 +9,8 @@ #' @import data.table #' @importFrom DT datatable #' @export -#' @examples -#' beaSearch('gross domestic product', asHtml = TRUE) +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaSearch('gross domestic product', beaKey = Sys.getenv("BEA_API_KEY"), asHtml = TRUE) beaSearch <- function(searchTerm, beaKey = NULL, asHtml = FALSE){ warning('Note: This function is currently only able to search NIPA, NIUnderlyingDetail, and FixedAssets data.') diff --git a/R/beaSets.r b/R/beaSets.r index 8ed1026..28a8913 100644 --- a/R/beaSets.r +++ b/R/beaSets.r @@ -1,22 +1,22 @@ -#' Returns a list of all datasets -#' -#' @param beaKey Your API key -#' @keywords metadata -#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @export -#' @examples -#' beaSets('yourAPIkey') - -beaSets <- function(beaKey) { - #Set up spec for it - beaMetaSpecs <- list( - 'method' = 'GetDataSetList', - 'UserID' = beaKey , - 'ResultFormat' = 'json' - ) - - #Set list using beaGet - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - return(beaResponse) -} \ No newline at end of file +#' Returns a list of all datasets +#' +#' @param beaKey Your API key +#' @keywords metadata +#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaSets(Sys.getenv("BEA_API_KEY")) + +beaSets <- function(beaKey) { + #Set up spec for it + beaMetaSpecs <- list( + 'method' = 'GetDataSetList', + 'UserID' = beaKey , + 'ResultFormat' = 'json' + ) + + #Set list using beaGet + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + return(beaResponse) +} diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 30a4b71..7dce332 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -7,8 +7,8 @@ #' @import httr data.table #' @importFrom jsonlite fromJSON #' @export -#' @examples -#' beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = 'yourAPIkey') +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = Sys.getenv("BEA_API_KEY")) beaUpdateMetadata <- function(datasetList, beaKey){ diff --git a/README.md b/README.md deleted file mode 100644 index f70062d..0000000 --- a/README.md +++ /dev/null @@ -1,156 +0,0 @@ -# Patch/issue notes - -*GetParameterValuesFiltered method for list of parameters:* If your request returns the error message "The dataset requested requires parameters that were missing from the request" and the `beaParamVals()` method returns a very large number of results, [see the help request here](https://github.com/us-bea/bea.R/pull/5) for an example of how to use `beaGet()` to return a filtered list of parameters. - -*Patch 1.0.5 Note:* The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. - -To find the new parameters to use with TableName, use any one of the following: - -```R - beaSearch('NIPA', '[your 36-digit BEA API key]') - beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') - beaSearch('NIUnderlyingDetail', '[your 36-digit BEA API key]') - beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') -``` - -*Patch 1.0.2 Note:* The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. - - -# Instructions - -Thank you for using BEA's R library. The library is intended to make it easier to retrieve and work with BEA data. - -After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). -## To Install and Load the stable, published version of the bea.R Library (recommended) - -```R - install.packages('bea.R') - library(bea.R) -``` - -## To Install and Load the development version of the bea.R Library (not recommended) - -**Please take the following steps:** - -1. Run the following line of code to install the 'httr' and 'devtools' packages: -```r - install.packages(c('devtools', 'httr')) -``` - -2. Load the packages listed in Step 1 using the 'library' function: -```r - library(httr) - library(devtools) -``` - -3. Install the bea.R library from the BEA GitHub repo: -```r - httr::set_config( config( ssl_verifypeer = 0L )) #zero L - devtools::install_github('us-bea/bea.R') -``` - - -4. Load bea.R using the library function. -```r - library(bea.R) -``` -You are now ready to use bea.R! - -## To Get Started -You must first [register for an API key](http://www.bea.gov/API/signup/index.cfm) from BEA by providing your name and email address. The key will be emailed to you. - -Once you have received your BEA API key, save it to a variable to make it easier to use later: - -```r -beaKey <- 'YOUR 36-DIGIT API KEY' -``` - -## To Use beaSearch and beaGet - -Currently, the bea.R library offers two main methods: beaSearch and beaGet. - -### beaSearch -This method allows you to search for BEA data by keyword. For example, to find all datasets in which the term "personal consumption" appears, use the following: - -```r -beaSearch('personal consumption', beaKey) -``` - -Please note that that beaSearch currently searches only national and regional data. - -You may also specify "asHtml = TRUE" to view in-browser: -```r -beaSearch('gross domestic', beaKey, asHtml = TRUE) -``` - -The contents of this function are automatically updated using a new metadata component of BEA's API; as such, we recommend that you use it with your API key, and the first use of this function requires that you use your key or it will be unable to extract the metadata. - -If you do not wish to automatically update the metadata (e.g., you have conducted a study using the search function), simply searching for the term without also passing your key to the function will do a search only using your locally stored version. - -However, *this approach is not advised.* If you would like to retain metadata for posterity, please copy it from the "bea.R/data" area of your .libPaths() directory to local storage elsewhere on your machine; this will help prevent accidental overwrite, and will not interfere with the "freshness" of your searches. - -### beaGet - -Once you have identified the TableID number and other information, you can use beaGet to access the data. The following code, for example, returns the NIPA table with 2015 data for TableID no. 66. - -```r -beaSpecs <- list( - 'UserID' = beaKey , - 'Method' = 'GetData', - 'datasetname' = 'NIPA', - 'TableName' = 'T20305', - 'Frequency' = 'Q', - 'Year' = 'X', - 'ResultFormat' = 'json' -); -beaPayload <- beaGet(beaSpecs); -``` - -To retrieve a limited selection of multiple years, list all the years you want to retrieve. For example, to retrieve data for 2011-2015, use "Year"="2011,2012,2013,2014,2015" - -The [API documentation](http://www.bea.gov/API/bea_web_service_api_user_guide.htm) includes information about the specific parameters required by beaGET. - -Setting asWide = FALSE gives results closest to the way they are actually returned by the API (every column is a variable, every row is an observation): -```r -beaLong <- beaGet(beaSpecs, asWide = FALSE) -``` - -To return in a format in which each column represents a series, set iTableStyle = FALSE. - -This returns columns named with a concatenation of the descriptive column values, whereas rows are populated with numeric DataValues for each TimePeriod, and has one column named "TimePeriod" filled with dates. -```r -beaStatTab <- beaGet(beaSpecs, iTableStyle = FALSE) -``` - -By default, asWide = TRUE and iTableStyle = TRUE, as this format is the most similar to our iTables; the "beaPayload" object in our first beaGet example at the beginning of this section is in the default format. - - -## To Use beaViz - -The bea.R library also includes an experimental method to create a visual dashboard. This method is still under development. Currently, it is designed to work with the standard R Console interface—not with other interfaces such as R Studio. (However, if you want to experiment with beaViz in R Studio, click on "Open in Browser" at the top of pop-up box after you execute the beaViz method. - -The beaViz method allows you to pass a variable generated from beaGet to create a dashboard. To use the "beaPayload" example given above, enter the following command: - -```r -beaViz(beaPayload) -``` -Please note that beaViz is currently only available for use with the NIPA and NIUnderlyingDetail datasets and the associated metadata. -BEA is open to any thoughts you may have about visually representing BEA data. - - -# About bea.R -bea.R is a library for use with BEA’s API and the R programming language, version 3.2.1 or higher. - -This library serves two core purposes: - -1. To Extract/Transform/Load data [beaGet] from the BEA API as R-friendly formats in the user's workspace. Transformation done by default in beaGet is analogous to the format used in [BEA's iTables](http://www.bea.gov/itable/index.cfm), but this can be modified using beaGet's optional parameters. - -2. To enable the search of descriptive metadata [beaSearch]. - -Other features of the library exist mainly as intermediate methods or are in early stages of development. - - -# Disclaimer -The United States Department of Commerce (DOC) GitHub project code is provided on an ‘as is’ basis and the user assumes responsibility for its use. DOC has relinquished control of the information and no longer has responsibility to protect the integrity, confidentiality, or availability of the information. Any claims against the Department of Commerce stemming from the use of its GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government. - -Use of this library will result in data being stored on users' local machines. Specifically, local copies of BEA API metadata will be stored and automatically updated in the .libPaths() "/bea.R/data" directory in order to improve performance of beaSearch. diff --git a/beaR_Manual.pdf b/beaR_Manual.pdf deleted file mode 100644 index f7eb9e172b1bdec23753e7c9cadcc143325c4415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121747 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

  • R<9EC+iu@pnN_)M|a1wnN&oMl5A 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%0A9(xC1MNkfgL+w{b9FQ^4dFH$hOSDcwusVgY3 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 literal 0 HcmV?d00001 From 01156826b608f5c91637a44350c959e7d17a5610 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Tue, 1 Apr 2025 10:55:59 -0400 Subject: [PATCH 29/32] update examples --- DESCRIPTION | 70 ++-- R/bea.R | 48 +-- R/bea2List.r | 186 ++++----- R/bea2Tab.r | 382 +++++++++---------- R/beaGet.r | 206 +++++----- R/beaParamVals.r | 46 +-- R/beaParams.r | 44 +-- R/beaSearch.r | 870 +++++++++++++++++++++--------------------- R/beaSets.r | 44 +-- R/beaUpdateMetadata.r | 556 +++++++++++++-------------- R/zzz.R | 8 +- README.md | 312 +++++++-------- html/R.css | 194 +++++----- man/bea2List.Rd | 2 +- man/bea2Tab.Rd | 2 +- man/beaParamVals.Rd | 4 +- 16 files changed, 1487 insertions(+), 1487 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index fa068e9..7d56b2a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,35 +1,35 @@ -Package: bea.R -Title: Bureau of Economic Analysis API -Version: 1.1.0 -Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), - email = c("Andrea.Batch@bea.gov")), - person("Jeff", "Chen", role = "ctb"), - person("Walt", "Kampas", role = "ctb")) -Author: Andrea Batch [aut, cre], - Jeff Chen [ctb], - Walt Kampas [ctb] -Maintainer: Andrea Batch -Depends: - R (>= 3.2.1), - data.table -Imports: - httr, - DT, - jsonlite -Description: Provides an R interface for the Bureau of Economic Analysis (BEA) - API (see for - more information) that serves two core purposes - - 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly - formats in the user's work space [transformation done by default in beaGet() - can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. - 2. To enable the search of descriptive meta data [beaSearch()]. - Other features of the library exist mainly as intermediate methods - or are in early stages of development. - Important Note - You must have an API key to use this library. - Register for a key at . -URL: https://github.com/us-bea/bea.R -License: CC0 -LazyData: no -Encoding: UTF-8 -Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.2 +Package: bea.R +Title: Bureau of Economic Analysis API +Version: 1.1.0 +Authors@R: c(person("Andrea", "Batch", role = c("aut", "cre"), + email = c("Andrea.Batch@bea.gov")), + person("Jeff", "Chen", role = "ctb"), + person("Walt", "Kampas", role = "ctb")) +Author: Andrea Batch [aut, cre], + Jeff Chen [ctb], + Walt Kampas [ctb] +Maintainer: Andrea Batch +Depends: + R (>= 3.2.1), + data.table +Imports: + httr, + DT, + jsonlite +Description: Provides an R interface for the Bureau of Economic Analysis (BEA) + API (see for + more information) that serves two core purposes - + 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly + formats in the user's work space [transformation done by default in beaGet() + can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. + 2. To enable the search of descriptive meta data [beaSearch()]. + Other features of the library exist mainly as intermediate methods + or are in early stages of development. + Important Note - You must have an API key to use this library. + Register for a key at . +URL: https://github.com/us-bea/bea.R +License: CC0 +LazyData: no +Encoding: UTF-8 +Roxygen: list(markdown = TRUE) +RoxygenNote: 7.3.2 diff --git a/R/bea.R b/R/bea.R index b2ef292..cc1be45 100644 --- a/R/bea.R +++ b/R/bea.R @@ -1,25 +1,25 @@ -# File share/R/nspackloader.R -# Part of the R package, http://www.R-project.org -# -# Copyright (C) 1995-2012 The R Core Team -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# A copy of the GNU General Public License is available at -# http://www.r-project.org/Licenses/ - -.onLoad <- function(libname, pkgname) { - ns <- .getNamespace(pkgname) - if (is.null(ns)) stop("cannot find namespace environment for ", pkgname, domain = NA) - - dbbase <- file.path(libname, pkgname, "R", pkgname) - lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.") +# File share/R/nspackloader.R +# Part of the R package, http://www.R-project.org +# +# Copyright (C) 1995-2012 The R Core Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# A copy of the GNU General Public License is available at +# http://www.r-project.org/Licenses/ + +.onLoad <- function(libname, pkgname) { + ns <- .getNamespace(pkgname) + if (is.null(ns)) stop("cannot find namespace environment for ", pkgname, domain = NA) + + dbbase <- file.path(libname, pkgname, "R", pkgname) + lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.") } \ No newline at end of file diff --git a/R/bea2List.r b/R/bea2List.r index 9d06fee..b58f676 100644 --- a/R/bea2List.r +++ b/R/bea2List.r @@ -1,93 +1,93 @@ -#' Convert BEA API httr response payload to list -#' -#' @param beaPayload An object with httr class 'response' from call to BEA API -#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) -#' @return An object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @import httr -#' @importFrom jsonlite fromJSON -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') -#' resp <- beaGet(userSpecList, asTable = FALSE) -#' BL <- bea2List(resp) - - -bea2List <- function(beaPayload, isMeta=FALSE) { - requireNamespace('httr', quietly = TRUE) - requireNamespace('jsonlite', quietly = TRUE) - - if((class(beaPayload) != 'response') && (class(beaPayload) != 'character')){ - stop('Submitted variable is not a valid JSON string or httr response class object.', call.=TRUE) - } - - if(class(beaPayload) == 'response'){ - if(floor(beaPayload$status_code/100) != 2){ - stop( - paste0('Request failed. Returned HTTP status code: ', beaPayload$status_code), - call. = TRUE - ) - } - - #Never going to fix later: I gave up on parsing it identically and just re-pull data as JSON. - if(length(grep("resultformat=xml", beaPayload$url, ignore.case=TRUE))==1){ - beaJSON <- httr::GET( - gsub( - "resultformat=xml", - "ResultFormat=json", - beaPayload$url, - ignore.case=TRUE - ) - ) - - beaContent <- httr::content(beaJSON, as = 'text', encoding = 'UTF-8') - } - else { - beaContent <- httr::content(beaPayload, as = 'text', encoding = 'UTF-8') - } - } else { - beaContent <- beaPayload - } - - beaResponse <- jsonlite::fromJSON(beaContent) - if(!is.element('BEAAPI', names(beaResponse))){ - stop(paste0('The submitted request was not a valid BEA API response: ', beaContent), call.=TRUE) - } - #Handler for certain dataset responses having a different structure >:( - if(class(beaResponse$BEAAPI$Results) == 'data.frame'){ - beaResponse$BEAAPI$Results <- as.list(beaResponse$BEAAPI$Results) - beaResponse$BEAAPI$Results$Dimensions <- as.data.frame(beaResponse$BEAAPI$Results$Dimensions) - beaResponse$BEAAPI$Results$Notes <- as.data.frame(beaResponse$BEAAPI$Results$Notes) - beaResponse$BEAAPI$Results$Data <- as.data.frame(beaResponse$BEAAPI$Results$Data) - } - - if('error' %in% tolower( - attributes( - beaResponse$BEAAPI$Results - )$names) - ){ - warning(beaResponse$BEAAPI$Results$Error$APIErrorDescription) - return(beaResponse$BEAAPI$Results) - } - - if(isMeta){ - beaList <- beaResponse$BEAAPI$Results - attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam - } else { - beaList <- beaResponse$BEAAPI$Results$Data - attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam - attributes(beaList)$detail <- beaResponse$BEAAPI$Results[( - attributes(beaResponse$BEAAPI$Results)$names != 'Data' - )] - beaList$DataValue <- as.numeric( - gsub(',', '', beaList$DataValue, fixed = TRUE) - ) - } - - #Use jsonlite fromJSON f(x) to convert to list - return(beaList) -} +#' Convert BEA API httr response payload to list +#' +#' @param beaPayload An object with httr class 'response' from call to BEA API +#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) +#' @return An object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @import httr +#' @importFrom jsonlite fromJSON +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), +#' 'Method' = 'GetData', +#' 'datasetname' = 'NIPA', +#' 'Frequency' = 'A', +#' 'TableName' = 'T20405', +#' 'Year' = 'X') +#' resp <- beaGet(userSpecList, asTable = FALSE) +#' BL <- bea2List(resp) + + +bea2List <- function(beaPayload, isMeta=FALSE) { + requireNamespace('httr', quietly = TRUE) + requireNamespace('jsonlite', quietly = TRUE) + + if((class(beaPayload) != 'response') && (class(beaPayload) != 'character')){ + stop('Submitted variable is not a valid JSON string or httr response class object.', call.=TRUE) + } + + if(class(beaPayload) == 'response'){ + if(floor(beaPayload$status_code/100) != 2){ + stop( + paste0('Request failed. Returned HTTP status code: ', beaPayload$status_code), + call. = TRUE + ) + } + + #Never going to fix later: I gave up on parsing it identically and just re-pull data as JSON. + if(length(grep("resultformat=xml", beaPayload$url, ignore.case=TRUE))==1){ + beaJSON <- httr::GET( + gsub( + "resultformat=xml", + "ResultFormat=json", + beaPayload$url, + ignore.case=TRUE + ) + ) + + beaContent <- httr::content(beaJSON, as = 'text', encoding = 'UTF-8') + } + else { + beaContent <- httr::content(beaPayload, as = 'text', encoding = 'UTF-8') + } + } else { + beaContent <- beaPayload + } + + beaResponse <- jsonlite::fromJSON(beaContent) + if(!is.element('BEAAPI', names(beaResponse))){ + stop(paste0('The submitted request was not a valid BEA API response: ', beaContent), call.=TRUE) + } + #Handler for certain dataset responses having a different structure >:( + if(class(beaResponse$BEAAPI$Results) == 'data.frame'){ + beaResponse$BEAAPI$Results <- as.list(beaResponse$BEAAPI$Results) + beaResponse$BEAAPI$Results$Dimensions <- as.data.frame(beaResponse$BEAAPI$Results$Dimensions) + beaResponse$BEAAPI$Results$Notes <- as.data.frame(beaResponse$BEAAPI$Results$Notes) + beaResponse$BEAAPI$Results$Data <- as.data.frame(beaResponse$BEAAPI$Results$Data) + } + + if('error' %in% tolower( + attributes( + beaResponse$BEAAPI$Results + )$names) + ){ + warning(beaResponse$BEAAPI$Results$Error$APIErrorDescription) + return(beaResponse$BEAAPI$Results) + } + + if(isMeta){ + beaList <- beaResponse$BEAAPI$Results + attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam + } else { + beaList <- beaResponse$BEAAPI$Results$Data + attributes(beaList)$params <- beaResponse$BEAAPI$Request$RequestParam + attributes(beaList)$detail <- beaResponse$BEAAPI$Results[( + attributes(beaResponse$BEAAPI$Results)$names != 'Data' + )] + beaList$DataValue <- as.numeric( + gsub(',', '', beaList$DataValue, fixed = TRUE) + ) + } + + #Use jsonlite fromJSON f(x) to convert to list + return(beaList) +} diff --git a/R/bea2Tab.r b/R/bea2Tab.r index 3841da8..8aa25eb 100644 --- a/R/bea2Tab.r +++ b/R/bea2Tab.r @@ -1,191 +1,191 @@ -#' Convert BEA API httr response or list payload to data.table -#' -#' @param beaPayload An object of class 'list' or httr 'response' returned from beaGet() call to BEA API -#' @param asWide Return data.table in wide format (default: TRUE) -#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) -#' @description Convert BEA API httr response or list payload to data.table. Also, converts LONG data frame (default API format - see bea2List results) to WIDE data (with years as columns) by default -#' @return An object of class 'data.table' containing data from beaGet(...) with custom attributes(BDT)$params. -#' @import data.table -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') -#' resp <- beaGet(userSpecList) -#' BDT <- bea2Tab(resp) - -bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { - requireNamespace('data.table', quietly = TRUE) - if('response' %in% class(beaPayload)){ - beaResponse <- bea.R::bea2List(beaPayload) - } else { - beaResponse <- beaPayload - } - - if('error' %in% tolower( - attributes(beaResponse)$names - ) - ){ - warning('API response error. Please print your response payload for details.') - return(beaResponse$Error$APIErrorDescription) - } - - DataValue <- NULL - TimePeriod <- NULL - Year <- NULL - LineNumber <- NULL - beaResults <- data.table::as.data.table(beaResponse) - attributes(beaResults)$is.wide <- FALSE - - #Some datasets use "Year" while others use "TimePeriod"; you must remove both during reshape to wide - TimeIntersect <- intersect(attributes(beaResponse)$detail$Dimensions$Name, c('TimePeriod', 'Year')) - if(length(TimeIntersect) > 1){ - TimeColName <- 'TimePeriod' - } else { - TimeColName <- TimeIntersect - } - #Convert wide matrix to long - #(less common as data comes as long, but needed for beaViz) - if('data.frame' %in% class(beaPayload)){ - if( - attributes(beaPayload)$is.wide == TRUE && - !asWide - ) { - - beaTab <- beaResults - id <- NULL - dateColNames <- sort(attributes(beaTab)$names[ - grepl( - 'DataValue_', - attributes(beaTab)$names, - fixed = TRUE - ) - ]) - - dateVector <- sort(gsub( - 'DataValue_', - '', - dateColNames - )) - - beaResults <- try(stats::reshape( - beaTab, - varying = dateColNames, - v.names = 'DataValue', - timevar = TimeColName, - times = dateVector, - direction = 'long')[, - id:=NULL - ] - ) - - if(length(TimeIntersect) > 1){ - suppressWarnings(beaResults[, Year := substr(TimePeriod, 1, 4)]) - } - - attributes(beaResults)$is.wide <- FALSE - } - } - #Convert long matrix to wide (if needed) - if( - asWide && - !is.null(attributes(beaResponse)$detail) - ){ - beaTab <- beaResults - eval(parse(text = paste0('data.table::setkey(beaTab, key = ', TimeColName, ')'))) - noDV <- attributes(beaTab)$names != 'DataValue' - noTS <- attributes(beaTab)$names != TimeIntersect - noNotes <- attributes(beaTab)$names != 'NoteRef' - - #A weird fix to push NA values down to bottom for reshaping - beaTab[, DataValue := ifelse(is.na(DataValue), 0, DataValue)] - -# beaResults <- try(stats::reshape( -# beaTab, -# timevar = 'TimePeriod', -# idvar = attributes(beaTab)$names[noDV & noTS & noNotes], -# direction = 'wide') -# ) - eval( - parse( - text=paste0( - 'beaResults <- data.table::dcast(data.table::melt(beaTab, measure = "DataValue"),', - paste( - attributes(beaTab)$names[noDV & noTS & noNotes], - collapse='+' - ), - ' ~ variable + ', TimeColName, ')' - ) - ) - ) - if( - any( - tolower( - attributes(beaResponse)$params$ParameterValue - ) %in% - c('nipa', 'niunderlyingdetail', 'fixedassets') - ) - ){ - beaResults <- beaResults[order(as.numeric(LineNumber))] - } - attributes(beaResults)$is.wide <- TRUE - if (!iTableStyle){ - beaTrans <- beaResults - - # beaStrMatrix <- t( - beaColHeaders <- - eval( - parse( - # text = paste0('beaTrans[ , .(', paste( - text = paste0('beaTrans[ , paste(', paste( - attributes(beaTrans)$names[ - !grepl('DataValue_', attributes(beaTrans)$names, fixed = T) - ], collapse = ',' - ), ')]') - ) - ) - # ) - - beaNumMatrix <- t( - eval( - parse( - text = paste0('beaTrans[ , .(', paste( - sort(attributes(beaTrans)$names[ - grepl('DataValue_', attributes(beaTrans)$names, fixed = T) - ]), collapse = ',' - ), ')]') - ) - ) - ) - - - # headRows <- data.table(beaStrMatrix) - # dataRows <- data.table(beaNumMatrix) - - # beaResults <- rbindlist(list(headRows, dataRows)) - - colnames(beaNumMatrix) <- beaColHeaders - - beaResults <- data.table(beaNumMatrix) - eval(parse(text = paste0("beaResults[, ", TimeColName, " := gsub('DataValue_', - '', attributes(beaTrans)$names[ - grepl('DataValue_', attributes(beaTrans)$names, fixed = T) - ], - fixed = TRUE - )]; - data.table::setkey(beaResults, key = ", TimeColName, ");"))) - } - } - - attributes(beaResults)$params <- attributes(beaResponse)$params - attributes(beaResults)$detail <- attributes(beaResponse)$detail - - if(is.null(attributes(beaResults)$params)){ - warning('Request parameter data not found; returned values may not contain successful BEA API response.') - } - - return(beaResults) -} +#' Convert BEA API httr response or list payload to data.table +#' +#' @param beaPayload An object of class 'list' or httr 'response' returned from beaGet() call to BEA API +#' @param asWide Return data.table in wide format (default: TRUE) +#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) +#' @description Convert BEA API httr response or list payload to data.table. Also, converts LONG data frame (default API format - see bea2List results) to WIDE data (with years as columns) by default +#' @return An object of class 'data.table' containing data from beaGet(...) with custom attributes(BDT)$params. +#' @import data.table +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), +#' 'Method' = 'GetData', +#' 'datasetname' = 'NIPA', +#' 'Frequency' = 'A', +#' 'TableName' = 'T20405', +#' 'Year' = 'X') +#' resp <- beaGet(userSpecList) +#' BDT <- bea2Tab(resp) + +bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { + requireNamespace('data.table', quietly = TRUE) + if('response' %in% class(beaPayload)){ + beaResponse <- bea.R::bea2List(beaPayload) + } else { + beaResponse <- beaPayload + } + + if('error' %in% tolower( + attributes(beaResponse)$names + ) + ){ + warning('API response error. Please print your response payload for details.') + return(beaResponse$Error$APIErrorDescription) + } + + DataValue <- NULL + TimePeriod <- NULL + Year <- NULL + LineNumber <- NULL + beaResults <- data.table::as.data.table(beaResponse) + attributes(beaResults)$is.wide <- FALSE + + #Some datasets use "Year" while others use "TimePeriod"; you must remove both during reshape to wide + TimeIntersect <- intersect(attributes(beaResponse)$detail$Dimensions$Name, c('TimePeriod', 'Year')) + if(length(TimeIntersect) > 1){ + TimeColName <- 'TimePeriod' + } else { + TimeColName <- TimeIntersect + } + #Convert wide matrix to long + #(less common as data comes as long, but needed for beaViz) + if('data.frame' %in% class(beaPayload)){ + if( + attributes(beaPayload)$is.wide == TRUE && + !asWide + ) { + + beaTab <- beaResults + id <- NULL + dateColNames <- sort(attributes(beaTab)$names[ + grepl( + 'DataValue_', + attributes(beaTab)$names, + fixed = TRUE + ) + ]) + + dateVector <- sort(gsub( + 'DataValue_', + '', + dateColNames + )) + + beaResults <- try(stats::reshape( + beaTab, + varying = dateColNames, + v.names = 'DataValue', + timevar = TimeColName, + times = dateVector, + direction = 'long')[, + id:=NULL + ] + ) + + if(length(TimeIntersect) > 1){ + suppressWarnings(beaResults[, Year := substr(TimePeriod, 1, 4)]) + } + + attributes(beaResults)$is.wide <- FALSE + } + } + #Convert long matrix to wide (if needed) + if( + asWide && + !is.null(attributes(beaResponse)$detail) + ){ + beaTab <- beaResults + eval(parse(text = paste0('data.table::setkey(beaTab, key = ', TimeColName, ')'))) + noDV <- attributes(beaTab)$names != 'DataValue' + noTS <- attributes(beaTab)$names != TimeIntersect + noNotes <- attributes(beaTab)$names != 'NoteRef' + + #A weird fix to push NA values down to bottom for reshaping + beaTab[, DataValue := ifelse(is.na(DataValue), 0, DataValue)] + +# beaResults <- try(stats::reshape( +# beaTab, +# timevar = 'TimePeriod', +# idvar = attributes(beaTab)$names[noDV & noTS & noNotes], +# direction = 'wide') +# ) + eval( + parse( + text=paste0( + 'beaResults <- data.table::dcast(data.table::melt(beaTab, measure = "DataValue"),', + paste( + attributes(beaTab)$names[noDV & noTS & noNotes], + collapse='+' + ), + ' ~ variable + ', TimeColName, ')' + ) + ) + ) + if( + any( + tolower( + attributes(beaResponse)$params$ParameterValue + ) %in% + c('nipa', 'niunderlyingdetail', 'fixedassets') + ) + ){ + beaResults <- beaResults[order(as.numeric(LineNumber))] + } + attributes(beaResults)$is.wide <- TRUE + if (!iTableStyle){ + beaTrans <- beaResults + + # beaStrMatrix <- t( + beaColHeaders <- + eval( + parse( + # text = paste0('beaTrans[ , .(', paste( + text = paste0('beaTrans[ , paste(', paste( + attributes(beaTrans)$names[ + !grepl('DataValue_', attributes(beaTrans)$names, fixed = T) + ], collapse = ',' + ), ')]') + ) + ) + # ) + + beaNumMatrix <- t( + eval( + parse( + text = paste0('beaTrans[ , .(', paste( + sort(attributes(beaTrans)$names[ + grepl('DataValue_', attributes(beaTrans)$names, fixed = T) + ]), collapse = ',' + ), ')]') + ) + ) + ) + + + # headRows <- data.table(beaStrMatrix) + # dataRows <- data.table(beaNumMatrix) + + # beaResults <- rbindlist(list(headRows, dataRows)) + + colnames(beaNumMatrix) <- beaColHeaders + + beaResults <- data.table(beaNumMatrix) + eval(parse(text = paste0("beaResults[, ", TimeColName, " := gsub('DataValue_', + '', attributes(beaTrans)$names[ + grepl('DataValue_', attributes(beaTrans)$names, fixed = T) + ], + fixed = TRUE + )]; + data.table::setkey(beaResults, key = ", TimeColName, ");"))) + } + } + + attributes(beaResults)$params <- attributes(beaResponse)$params + attributes(beaResults)$detail <- attributes(beaResponse)$detail + + if(is.null(attributes(beaResults)$params)){ + warning('Request parameter data not found; returned values may not contain successful BEA API response.') + } + + return(beaResults) +} diff --git a/R/beaGet.r b/R/beaGet.r index dd9e6d9..0192545 100644 --- a/R/beaGet.r +++ b/R/beaGet.r @@ -1,103 +1,103 @@ -#' Pass list of user specifications (including API key) to return data from BEA API. -#' -#' @param beaSpec A list of user specifications (required). In this example, 'GetData' specifies that we want data values (rather than metadata), 'NIPA' specifies the dataset, 'A' specifies that we want annual data, 'TableID' = '68' gets a specific table, and 'X' gets all years. See BEA API documentation or use metadata methods for complete lists of parameters. -#' @param asString Return result body as a string (default: FALSE) -#' @param asList Return result body as a list (default: FALSE) -#' @param asTable Return result body as a data.table (default: TRUE) -#' @param asWide Return data.table in wide format (default: TRUE) -#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) -#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) -#' @return By default, an object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @import httr -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), -#' 'Method' = 'GetData', -#' 'datasetname' = 'NIPA', -#' 'Frequency' = 'A', -#' 'TableID' = '68', -#' 'Year' = 'X') -#' BDT <- beaGet(userSpecList, asTable = TRUE) - -beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=TRUE, isMeta=FALSE, iTableStyle=TRUE) { -#, asTS=FALSE - if(class(beaSpec) != 'list'){ - warning('Please specify API parameters as a list. For example: - beaGet(list("UserID" = "YourKey", "Method" = "GetData", [your remaining parameters]))') - stop(paste0('Invalid object class passed to beaGet([list of API parameters]): ', class(beaSpec), '. Should be of class "list"'), call.=TRUE) - } - - - - requireNamespace('httr', quietly = TRUE) - attributes(beaSpec)$names <- tolower(attributes(beaSpec)$names) - - if(class(beaSpec$userid) != 'character'){ - stop(paste0('Invalid API key of class ', class(beaSpec$userid)), call.=TRUE) - } - - beaSpec$userid <- gsub(' ', '', beaSpec$userid, fixed=T) - - if(nchar(beaSpec$userid) != 36){ - stop(paste0('Invalid API key: ', beaSpec$userid), call.=TRUE) - } - - #Parse user settings into API URL - beaUrl <- utils::URLencode( - paste0( - 'https://apps.bea.gov/api/data?UserID=', - beaSpec$userid, - '&', - paste( - paste( - attributes(beaSpec)$names[!grepl('userid', attributes(beaSpec)$names)], - beaSpec[!grepl('userid', attributes(beaSpec)$names)], - sep = '=' - ), - collapse = '&' - ), '&beaR=v2', - collapse = NULL) - ) - - #If the user just wants to return a list or table (default), use JSON - #Drop this later if we solve XML problem in section 1 - if(asTable||asList) { - #||asTS - beaUrl <- gsub( - "resultformat=xml", - "ResultFormat=json", - beaUrl, - ignore.case=TRUE - ) - } - #Use httr GET to make the API call - beaPayload <- httr::GET(beaUrl) - -#Give user format they want - if(asList && asString){ - warning('You have specified that you would like the data as both a list and a string. Please pick only one per request. Defaulting to string; if you have opted for a JSON response (default), you may pass this string to bea.R::bea2List([the JSON string returned by this function]) to return a list without making another API request.') - } - if(asString) { - beaContent <- httr::content(beaPayload, as = 'text', encoding = 'UTF-8') - return(beaContent) - } - else { - if(asList) { - metaMethod <- isMeta - beaResponse <- bea.R::bea2List(beaPayload, isMeta = metaMethod) - return(beaResponse) - } - else { - if(asTable) { - userWide <- asWide - userTabStyle <- iTableStyle - beaResults <- bea.R::bea2Tab(beaPayload, asWide = userWide, iTableStyle = userTabStyle) - return(beaResults) - } - else { - return(beaPayload) - } - } - } - #} -} +#' Pass list of user specifications (including API key) to return data from BEA API. +#' +#' @param beaSpec A list of user specifications (required). In this example, 'GetData' specifies that we want data values (rather than metadata), 'NIPA' specifies the dataset, 'A' specifies that we want annual data, 'TableID' = '68' gets a specific table, and 'X' gets all years. See BEA API documentation or use metadata methods for complete lists of parameters. +#' @param asString Return result body as a string (default: FALSE) +#' @param asList Return result body as a list (default: FALSE) +#' @param asTable Return result body as a data.table (default: TRUE) +#' @param asWide Return data.table in wide format (default: TRUE) +#' @param iTableStyle If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE) +#' @param isMeta Special parameter meant to interact with metadata functions (default: FALSE) +#' @return By default, an object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @import httr +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), +#' 'Method' = 'GetData', +#' 'datasetname' = 'NIPA', +#' 'Frequency' = 'A', +#' 'TableName' = 'T20405', +#' 'Year' = 'X') +#' BDT <- beaGet(userSpecList, asTable = TRUE) + +beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=TRUE, isMeta=FALSE, iTableStyle=TRUE) { +#, asTS=FALSE + if(class(beaSpec) != 'list'){ + warning('Please specify API parameters as a list. For example: + beaGet(list("UserID" = "YourKey", "Method" = "GetData", [your remaining parameters]))') + stop(paste0('Invalid object class passed to beaGet([list of API parameters]): ', class(beaSpec), '. Should be of class "list"'), call.=TRUE) + } + + + + requireNamespace('httr', quietly = TRUE) + attributes(beaSpec)$names <- tolower(attributes(beaSpec)$names) + + if(class(beaSpec$userid) != 'character'){ + stop(paste0('Invalid API key of class ', class(beaSpec$userid)), call.=TRUE) + } + + beaSpec$userid <- gsub(' ', '', beaSpec$userid, fixed=T) + + if(nchar(beaSpec$userid) != 36){ + stop(paste0('Invalid API key: ', beaSpec$userid), call.=TRUE) + } + + #Parse user settings into API URL + beaUrl <- utils::URLencode( + paste0( + 'https://apps.bea.gov/api/data?UserID=', + beaSpec$userid, + '&', + paste( + paste( + attributes(beaSpec)$names[!grepl('userid', attributes(beaSpec)$names)], + beaSpec[!grepl('userid', attributes(beaSpec)$names)], + sep = '=' + ), + collapse = '&' + ), '&beaR=v2', + collapse = NULL) + ) + + #If the user just wants to return a list or table (default), use JSON + #Drop this later if we solve XML problem in section 1 + if(asTable||asList) { + #||asTS + beaUrl <- gsub( + "resultformat=xml", + "ResultFormat=json", + beaUrl, + ignore.case=TRUE + ) + } + #Use httr GET to make the API call + beaPayload <- httr::GET(beaUrl) + +#Give user format they want + if(asList && asString){ + warning('You have specified that you would like the data as both a list and a string. Please pick only one per request. Defaulting to string; if you have opted for a JSON response (default), you may pass this string to bea.R::bea2List([the JSON string returned by this function]) to return a list without making another API request.') + } + if(asString) { + beaContent <- httr::content(beaPayload, as = 'text', encoding = 'UTF-8') + return(beaContent) + } + else { + if(asList) { + metaMethod <- isMeta + beaResponse <- bea.R::bea2List(beaPayload, isMeta = metaMethod) + return(beaResponse) + } + else { + if(asTable) { + userWide <- asWide + userTabStyle <- iTableStyle + beaResults <- bea.R::bea2Tab(beaPayload, asWide = userWide, iTableStyle = userTabStyle) + return(beaResults) + } + else { + return(beaPayload) + } + } + } + #} +} diff --git a/R/beaParamVals.r b/R/beaParamVals.r index 6a24f28..50ded10 100644 --- a/R/beaParamVals.r +++ b/R/beaParamVals.r @@ -1,23 +1,23 @@ -#' Gives list of values possible for a given dataset's parameters -#' -#' @param beaKey Your API key -#' @param setName Name of BEA dataset (e.g., NIPA) -#' @param paramName Name of BEA dataset parameter (e.g., TableID) -#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @keywords metadata -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'keycode') - -beaParamVals <- function(beaKey, setName, paramName) { - beaMetaSpecs <- list( - 'method' = 'GetParameterValues', - 'UserID' = beaKey, - 'datasetname'=setName, - 'ParameterName'=paramName, - 'ResultFormat' = 'json' - ) - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - return(beaResponse) -} +#' Gives list of values possible for a given dataset's parameters +#' +#' @param beaKey Your API key +#' @param setName Name of BEA dataset (e.g., NIPA) +#' @param paramName Name of BEA dataset parameter (e.g., TableName) +#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @keywords metadata +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'TableName') + +beaParamVals <- function(beaKey, setName, paramName) { + beaMetaSpecs <- list( + 'method' = 'GetParameterValues', + 'UserID' = beaKey, + 'datasetname'=setName, + 'ParameterName'=paramName, + 'ResultFormat' = 'json' + ) + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + return(beaResponse) +} diff --git a/R/beaParams.r b/R/beaParams.r index c377ea6..f8ae3b2 100644 --- a/R/beaParams.r +++ b/R/beaParams.r @@ -1,22 +1,22 @@ -#' Gives list of parameters possible for a given dataset -#' -#' @param beaKey Your API key -#' @param setName Name of BEA dataset (e.g., 'NIPA') -#' @keywords metadata -#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' beaParams(Sys.getenv("BEA_API_KEY"), 'NIPA') - -beaParams <- function(beaKey, setName) { - beaMetaSpecs <- list( - 'UserID' = beaKey , - 'method' = 'GetParameterList', - 'datasetname'=setName, - 'ResultFormat' = 'json' - ) - - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - return(beaResponse) -} +#' Gives list of parameters possible for a given dataset +#' +#' @param beaKey Your API key +#' @param setName Name of BEA dataset (e.g., 'NIPA') +#' @keywords metadata +#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaParams(Sys.getenv("BEA_API_KEY"), 'NIPA') + +beaParams <- function(beaKey, setName) { + beaMetaSpecs <- list( + 'UserID' = beaKey , + 'method' = 'GetParameterList', + 'datasetname'=setName, + 'ResultFormat' = 'json' + ) + + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + return(beaResponse) +} diff --git a/R/beaSearch.r b/R/beaSearch.r index de76cf5..1ab3b68 100644 --- a/R/beaSearch.r +++ b/R/beaSearch.r @@ -1,435 +1,435 @@ -#' Search a selection of indexed BEA data table names, series labels, and series codes. -#' -#' @param searchTerm A word or phrase of class 'character' to be found in BEA datasets -#' @param beaKey Character string representation of user API key. Necessary for first time use and updates; recommended for anything beyond one-off searches from the console. -#' @param asHtml Option to return results as DT markup, viewable in browser. Allows search WITHIN YOUR ALREADY-FILTERED RESULTS ONLY. Requires package 'DT' to be installed. -#' @keywords search -#' @description Searches indexed dataset table name, label, and series codes. CAUTION: Currently only searches within NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets). -#' @return An object of class 'data.table' with information about all indexed sets in which the search term was found. -#' @import data.table -#' @importFrom DT datatable -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' beaSearch('gross domestic product', beaKey = Sys.getenv("BEA_API_KEY"), asHtml = TRUE) - - beaSearch <- function(searchTerm, beaKey = NULL, asHtml = FALSE){ - warning('Note: This function is currently only able to search NIPA, NIUnderlyingDetail, and FixedAssets data.') -# beaSearch <- function(searchTerm, searchFilter = list(), justParents = FALSE, justChildren = FALSE){ - if (is.null(beaKey)){warning('Searching without specifying beaKey, e.g., - beaSearch("tobacco", beaKey = "[your 36-character API key]") -is not recommended, as the key is needed to update locally stored metadata.')} -#beaSearch throws spurious NOTEs on check() without this due to data.table Depends - 'LineDescription' <- NULL - 'SeriesCode' <- NULL - 'Key' <- NULL - 'LineNumber' <- NULL - 'Tier' <- NULL - 'ParentLine' <- NULL - 'Desc' <- NULL - 'DatasetName' <- NULL - 'Dataset' <- NULL - 'TableID' <- NULL - 'TableName' <- NULL - 'Parameter' <- NULL - 'APImtime' <- NULL - 'mtime' <- NULL - 'Account' <- NULL - '.' <- NULL - 'apiCall' <- NULL - 'nipaIndex' <- NULL - 'niudIndex' <- NULL - 'fixaIndex' <- NULL -# 'rdatIndex' <- NULL - 'rprdIndex' <- NULL - 'rincIndex' <- NULL - 'JSONUpdateDate' <- NULL - 'XMLUpdateDate' <- NULL - - requireNamespace('data.table', quietly = TRUE) - beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') - - beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); - beaMetaFilesTimes <- file.info(beaMetaFiles, extra_cols = TRUE) - beaMetaFilesTimes$Dataset <- gsub( - paste0(beaMetadataStore, '/'), - '', - attributes(beaMetaFilesTimes)$row.names, - fixed=T - ) - beaMetaMtime <- data.table::as.data.table(beaMetaFilesTimes)[, - .( - Dataset = gsub('.RData', '', Dataset, fixed=T), - mtime - ) - ] - data.table::setkey(beaMetaMtime, key = Dataset) - - #Add FixedAssets in future, but regionaldata has been merged into regionalproduct and regionalincome on the API - beaKnownMetaSets <- list( - 'nipa', - 'niunderlyingdetail', - 'fixedassets' -# 'regional' #Not yet implemented -# Deprecated -# 'regionaldata', -# 'regionalproduct', -# 'regionalincome' - ) - - if ((length(beaMetaFiles) == 0) & is.null(beaKey)){ - stop(paste0('No API key provided and no local metadata storage detected in ', beaMetadataStore, '. - Please provide a valid key to use beaSearch.'), call.=TRUE) - } -#Check to see if this is the first time using the search function; if so, update all metadata currently handled. - if (length(beaMetaFiles) < 3){ - #Create directory and make single call to get all metadata if there are missing meta .RData files - message('Creating first-time local copy of metadata for all datasets.') - message('Datasets will be updated only if timestamps indicate metadata obsolete in future searches.') - #message("and only obsolete metadata sets will be updated (it's faster this way).") - message("") - dir.create(beaMetadataStore, showWarnings = FALSE, recursive = TRUE) - - #call function to update metadata - remember to specify beaR namespace - beaUpdateMetadata(beaKnownMetaSets, beaKey) - - } else { - if (!is.null(beaKey)){ - #Make a "GetParameterValues" call to get timestamps of latest metadata update - beaMetaTimeSpec <- list( - 'UserID' = beaKey , - 'method' = 'GetParameterValues', - 'datasetname' = 'APIDatasetMetaData', - 'parametername' = 'dataset', - 'ResultFormat' = 'json' - ) - #Get metadata response with timestamps we need to check for updates as list - beaMetaParams <- bea.R::beaGet(beaMetaTimeSpec, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - beaMetaInfo <- data.table::as.data.table(beaMetaParams$ParamValue) - - data.table::setkey(beaMetaInfo, key = Dataset) - - tryCatch({ - #If JSON has been updated, set check param = false - - timeCompare <- beaMetaMtime[beaMetaInfo][, .( - Dataset, - mtime, - APImtime = as.POSIXct( - JSONUpdateDate, - format = "%Y-%m-%dT%H:%M:%S" - ) - )][!is.na(APImtime)] - - outdatedLocalMeta <- timeCompare[ - (is.na(mtime) & !is.na(APImtime)) | - APImtime > mtime, - Dataset - ] - - beaMetaFirstToCache <- FALSE - if(length(timeCompare[is.na(APImtime) & Dataset %in% beaKnownMetaSets, Dataset]) > 0){ - beaMetaFirstToCache <- TRUE - } - }, - error = function(e){ - beaMetaFirstToCache <- TRUE - beaUpdateMetadata(beaKnownMetaSets, beaKey) - }, - finally = {''}) - - if(length(outdatedLocalMeta[!tolower(outdatedLocalMeta) %in% beaKnownMetaSets]) > 0){ - warning('BEA API contains newly-available metadata for datasets not handled. - This version of beaR is either not the latest, or will soon be replaced.') - outdatedLocalMeta <- outdatedLocalMeta[tolower(outdatedLocalMeta) %in% beaKnownMetaSets] - } - - if(beaMetaFirstToCache){ - beaUpdateMetadata(beaKnownMetaSets, beaKey) - } else { - if(length(outdatedLocalMeta) > 0){ - beaUpdateMetadata(as.list(tolower(outdatedLocalMeta)), beaKey) - } - } - } - } - - beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); - - missingNat <- FALSE; - missingReg <- FALSE; - -#Remove RegionalData, but add FixedAssets later - if( - length(grep('FixedAssets', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('NIPA', beaMetaFiles, fixed = TRUE)) == 0 | - length(grep('NIUnderlyingDetail', beaMetaFiles, fixed = TRUE)) == 0 - ){ - warning(paste0('National metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching regional metadata only.')) - missingNat <- TRUE; - } - - - if( - #Not yet implemented - length(grep('Regional', beaMetaFiles, fixed = TRUE)) == 0 - #Deprecated -# length(grep('RegionalData', beaMetaFiles, fixed = TRUE)) == 0 | -# length(grep('RegionalProduct', beaMetaFiles, fixed = TRUE)) == 0 | -# length(grep('RegionalIncome', beaMetaFiles, fixed = TRUE)) == 0 - ){ - #Suppress for now since it may always be missing. - #warning(paste0('Regional metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching national metadata only.')) - missingReg <- TRUE; -# return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) - } - - if(missingNat && missingReg){ - stop(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.'), call.=TRUE) - } else { -#Remove RegionalData permanently - try({ - if(!missingNat){ - load(paste0(beaMetadataStore, '/FixedAssets.RData')) - load(paste0(beaMetadataStore, '/NIPA.RData')) - load(paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) - #Remove RegionalData, add FixedAssets later (fixaIndex) - nationalIndex <- rbindlist(list(nipaIndex, niudIndex, fixaIndex), use.names = TRUE, fill=F) - nationalIndex[, Account := 'National'] - data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) - - #Search national economic accounts for term - nPerfectMatch <- nationalIndex[ - grep( - tolower(searchTerm), - tolower( - paste( - LineDescription, - TableName, - SeriesCode, - DatasetName - ) - ), fixed=TRUE - ) - ] - - # nPerfectMatch[ , - # Parameter := NA - # ] - # nPerfectMatch[ , - # Key := NA - # ] - - nPerfectMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', 'TableName' = '", - TableID, - "', ...))" - ) - ] - - - nReasonableMatch <- nationalIndex[ - grep( - searchTerm, - paste( - LineDescription, - TableName, - SeriesCode, - DatasetName - ), ignore.case=TRUE - ) - ] - - # nReasonableMatch[ , - # Parameter := NA - # ] - # nReasonableMatch[ , - # Key := NA - # ] - - nReasonableMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', 'TableName' = '", - TableID, - "', ...))" - ) - ] - - #FixedAssets is different from NIPA and NIUnderlyingDetail; handler here - nPerfectMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] - nReasonableMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] - - - - } - - if(!missingReg){ - load(paste0(beaMetadataStore, '/RegionalProduct.RData')) - load(paste0(beaMetadataStore, '/RegionalIncome.RData')) - # load(paste0(beaMetadataStore, '/RegionalData.RData')) - - #Removed rdatIndex, which was used for RegionalData - regionalIndex <- rbindlist(list(rprdIndex, rincIndex), use.names = TRUE, fill=F) - try(regionalIndex[, Account := 'Regional']) - data.table::setkey(regionalIndex, key = DatasetName, Parameter, Key) - - - #Search regional accounts for the term - rPerfectMatch <- regionalIndex[ - grep( - tolower(searchTerm), - tolower( - paste( - Desc, - Key, - DatasetName - ) - ), fixed=TRUE - ) - ] - - # rPerfectMatch[ , - # TableID := NA - # ] - # rPerfectMatch[ , - # LineNumber := NA - # ] - # rPerfectMatch[ , - # SeriesCode := NA - # ] - # rPerfectMatch[ , - # LineDescription := NA - # ] - # rPerfectMatch[ , - # tier := NA - # ] - # rPerfectMatch[ , - # rootTabLine := NA - # ] - - - rPerfectMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', '", - Parameter, - "' = '", - Key, - "', ...))" - ) - ] - - - - rReasonableMatch <- regionalIndex[ - grep( - searchTerm, - paste( - Desc, - Key, - DatasetName - ), ignore.case=TRUE - ) - ] - - # rReasonableMatch[ , - # TableID := NA - # ] - # rReasonableMatch[ , - # LineNumber := NA - # ] - # rReasonableMatch[ , - # SeriesCode := NA - # ] - # rReasonableMatch[ , - # LineDescription := NA - # ] - # rReasonableMatch[ , - # tier := NA - # ] - # rReasonableMatch[ , - # rootTabLine := NA - # ] - - rReasonableMatch[, - apiCall := - paste0( - "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", - DatasetName, - "', '", - Parameter, - "' = '", - Key, - "', ...))" - ) - ] - } - - #TODO: figure out how to sort list by var name s.t. it concatenates lazily instead of this if-then stuff - if(!(missingNat) && !(missingReg)){ - searchMatch <- unique( - rbindlist( - list( - # nPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # rPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # nReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], - # rReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)] - nPerfectMatch, - rPerfectMatch, - nReasonableMatch, - rReasonableMatch - ), - use.names = TRUE, - fill = TRUE - ) - ) - } - - if(missingNat && !(missingReg)){ - searchMatch <- unique( - rbindlist( - list( - rPerfectMatch, - rReasonableMatch - ), - use.names = TRUE, - fill = TRUE - ) - ) - } - - if(!(missingNat) && missingReg){ - searchMatch <- unique( - rbindlist( - list( - nPerfectMatch, - nReasonableMatch - ), - use.names = TRUE, - fill = TRUE - ) - ) - } - - if(requireNamespace('DT', quietly = TRUE) && asHtml == TRUE){ - requireNamespace('DT', quietly = TRUE) - searchMatch <- DT::datatable(searchMatch) - } - else{ - if (asHtml == TRUE){ - message('Note: Returning as data.table. You must have package DT installed to return browser-viewable table.') - } - } - return(searchMatch) - }) - } -} +#' Search a selection of indexed BEA data table names, series labels, and series codes. +#' +#' @param searchTerm A word or phrase of class 'character' to be found in BEA datasets +#' @param beaKey Character string representation of user API key. Necessary for first time use and updates; recommended for anything beyond one-off searches from the console. +#' @param asHtml Option to return results as DT markup, viewable in browser. Allows search WITHIN YOUR ALREADY-FILTERED RESULTS ONLY. Requires package 'DT' to be installed. +#' @keywords search +#' @description Searches indexed dataset table name, label, and series codes. CAUTION: Currently only searches within NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets). +#' @return An object of class 'data.table' with information about all indexed sets in which the search term was found. +#' @import data.table +#' @importFrom DT datatable +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaSearch('gross domestic product', beaKey = Sys.getenv("BEA_API_KEY"), asHtml = TRUE) + + beaSearch <- function(searchTerm, beaKey = NULL, asHtml = FALSE){ + warning('Note: This function is currently only able to search NIPA, NIUnderlyingDetail, and FixedAssets data.') +# beaSearch <- function(searchTerm, searchFilter = list(), justParents = FALSE, justChildren = FALSE){ + if (is.null(beaKey)){warning('Searching without specifying beaKey, e.g., + beaSearch("tobacco", beaKey = "[your 36-character API key]") +is not recommended, as the key is needed to update locally stored metadata.')} +#beaSearch throws spurious NOTEs on check() without this due to data.table Depends + 'LineDescription' <- NULL + 'SeriesCode' <- NULL + 'Key' <- NULL + 'LineNumber' <- NULL + 'Tier' <- NULL + 'ParentLine' <- NULL + 'Desc' <- NULL + 'DatasetName' <- NULL + 'Dataset' <- NULL + 'TableID' <- NULL + 'TableName' <- NULL + 'Parameter' <- NULL + 'APImtime' <- NULL + 'mtime' <- NULL + 'Account' <- NULL + '.' <- NULL + 'apiCall' <- NULL + 'nipaIndex' <- NULL + 'niudIndex' <- NULL + 'fixaIndex' <- NULL +# 'rdatIndex' <- NULL + 'rprdIndex' <- NULL + 'rincIndex' <- NULL + 'JSONUpdateDate' <- NULL + 'XMLUpdateDate' <- NULL + + requireNamespace('data.table', quietly = TRUE) + beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') + + beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); + beaMetaFilesTimes <- file.info(beaMetaFiles, extra_cols = TRUE) + beaMetaFilesTimes$Dataset <- gsub( + paste0(beaMetadataStore, '/'), + '', + attributes(beaMetaFilesTimes)$row.names, + fixed=T + ) + beaMetaMtime <- data.table::as.data.table(beaMetaFilesTimes)[, + .( + Dataset = gsub('.RData', '', Dataset, fixed=T), + mtime + ) + ] + data.table::setkey(beaMetaMtime, key = Dataset) + + #Add FixedAssets in future, but regionaldata has been merged into regionalproduct and regionalincome on the API + beaKnownMetaSets <- list( + 'nipa', + 'niunderlyingdetail', + 'fixedassets' +# 'regional' #Not yet implemented +# Deprecated +# 'regionaldata', +# 'regionalproduct', +# 'regionalincome' + ) + + if ((length(beaMetaFiles) == 0) & is.null(beaKey)){ + stop(paste0('No API key provided and no local metadata storage detected in ', beaMetadataStore, '. + Please provide a valid key to use beaSearch.'), call.=TRUE) + } +#Check to see if this is the first time using the search function; if so, update all metadata currently handled. + if (length(beaMetaFiles) < 3){ + #Create directory and make single call to get all metadata if there are missing meta .RData files + message('Creating first-time local copy of metadata for all datasets.') + message('Datasets will be updated only if timestamps indicate metadata obsolete in future searches.') + #message("and only obsolete metadata sets will be updated (it's faster this way).") + message("") + dir.create(beaMetadataStore, showWarnings = FALSE, recursive = TRUE) + + #call function to update metadata - remember to specify beaR namespace + beaUpdateMetadata(beaKnownMetaSets, beaKey) + + } else { + if (!is.null(beaKey)){ + #Make a "GetParameterValues" call to get timestamps of latest metadata update + beaMetaTimeSpec <- list( + 'UserID' = beaKey , + 'method' = 'GetParameterValues', + 'datasetname' = 'APIDatasetMetaData', + 'parametername' = 'dataset', + 'ResultFormat' = 'json' + ) + #Get metadata response with timestamps we need to check for updates as list + beaMetaParams <- bea.R::beaGet(beaMetaTimeSpec, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + beaMetaInfo <- data.table::as.data.table(beaMetaParams$ParamValue) + + data.table::setkey(beaMetaInfo, key = Dataset) + + tryCatch({ + #If JSON has been updated, set check param = false + + timeCompare <- beaMetaMtime[beaMetaInfo][, .( + Dataset, + mtime, + APImtime = as.POSIXct( + JSONUpdateDate, + format = "%Y-%m-%dT%H:%M:%S" + ) + )][!is.na(APImtime)] + + outdatedLocalMeta <- timeCompare[ + (is.na(mtime) & !is.na(APImtime)) | + APImtime > mtime, + Dataset + ] + + beaMetaFirstToCache <- FALSE + if(length(timeCompare[is.na(APImtime) & Dataset %in% beaKnownMetaSets, Dataset]) > 0){ + beaMetaFirstToCache <- TRUE + } + }, + error = function(e){ + beaMetaFirstToCache <- TRUE + beaUpdateMetadata(beaKnownMetaSets, beaKey) + }, + finally = {''}) + + if(length(outdatedLocalMeta[!tolower(outdatedLocalMeta) %in% beaKnownMetaSets]) > 0){ + warning('BEA API contains newly-available metadata for datasets not handled. + This version of beaR is either not the latest, or will soon be replaced.') + outdatedLocalMeta <- outdatedLocalMeta[tolower(outdatedLocalMeta) %in% beaKnownMetaSets] + } + + if(beaMetaFirstToCache){ + beaUpdateMetadata(beaKnownMetaSets, beaKey) + } else { + if(length(outdatedLocalMeta) > 0){ + beaUpdateMetadata(as.list(tolower(outdatedLocalMeta)), beaKey) + } + } + } + } + + beaMetaFiles <- list.files(path = beaMetadataStore, full.names = TRUE); + + missingNat <- FALSE; + missingReg <- FALSE; + +#Remove RegionalData, but add FixedAssets later + if( + length(grep('FixedAssets', beaMetaFiles, fixed = TRUE)) == 0 | + length(grep('NIPA', beaMetaFiles, fixed = TRUE)) == 0 | + length(grep('NIUnderlyingDetail', beaMetaFiles, fixed = TRUE)) == 0 + ){ + warning(paste0('National metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching regional metadata only.')) + missingNat <- TRUE; + } + + + if( + #Not yet implemented + length(grep('Regional', beaMetaFiles, fixed = TRUE)) == 0 + #Deprecated +# length(grep('RegionalData', beaMetaFiles, fixed = TRUE)) == 0 | +# length(grep('RegionalProduct', beaMetaFiles, fixed = TRUE)) == 0 | +# length(grep('RegionalIncome', beaMetaFiles, fixed = TRUE)) == 0 + ){ + #Suppress for now since it may always be missing. + #warning(paste0('Regional metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; searching national metadata only.')) + missingReg <- TRUE; +# return(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.')) + } + + if(missingNat && missingReg){ + stop(paste0('Metadata is missing from ',beaMetadataStore,' and may be locked for updating on the BEA API; please try beaSearch again later.'), call.=TRUE) + } else { +#Remove RegionalData permanently + try({ + if(!missingNat){ + load(paste0(beaMetadataStore, '/FixedAssets.RData')) + load(paste0(beaMetadataStore, '/NIPA.RData')) + load(paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) + #Remove RegionalData, add FixedAssets later (fixaIndex) + nationalIndex <- rbindlist(list(nipaIndex, niudIndex, fixaIndex), use.names = TRUE, fill=F) + nationalIndex[, Account := 'National'] + data.table::setkey(nationalIndex, key = DatasetName, TableID, LineNumber) + + #Search national economic accounts for term + nPerfectMatch <- nationalIndex[ + grep( + tolower(searchTerm), + tolower( + paste( + LineDescription, + TableName, + SeriesCode, + DatasetName + ) + ), fixed=TRUE + ) + ] + + # nPerfectMatch[ , + # Parameter := NA + # ] + # nPerfectMatch[ , + # Key := NA + # ] + + nPerfectMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', 'TableName' = '", + TableID, + "', ...))" + ) + ] + + + nReasonableMatch <- nationalIndex[ + grep( + searchTerm, + paste( + LineDescription, + TableName, + SeriesCode, + DatasetName + ), ignore.case=TRUE + ) + ] + + # nReasonableMatch[ , + # Parameter := NA + # ] + # nReasonableMatch[ , + # Key := NA + # ] + + nReasonableMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', 'TableName' = '", + TableID, + "', ...))" + ) + ] + + #FixedAssets is different from NIPA and NIUnderlyingDetail; handler here + nPerfectMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] + nReasonableMatch[tolower(DatasetName) == 'fixedassets', apiCall := gsub("', 'TableName' = '", "', 'TableID' = '", apiCall, fixed = T)] + + + + } + + if(!missingReg){ + load(paste0(beaMetadataStore, '/RegionalProduct.RData')) + load(paste0(beaMetadataStore, '/RegionalIncome.RData')) + # load(paste0(beaMetadataStore, '/RegionalData.RData')) + + #Removed rdatIndex, which was used for RegionalData + regionalIndex <- rbindlist(list(rprdIndex, rincIndex), use.names = TRUE, fill=F) + try(regionalIndex[, Account := 'Regional']) + data.table::setkey(regionalIndex, key = DatasetName, Parameter, Key) + + + #Search regional accounts for the term + rPerfectMatch <- regionalIndex[ + grep( + tolower(searchTerm), + tolower( + paste( + Desc, + Key, + DatasetName + ) + ), fixed=TRUE + ) + ] + + # rPerfectMatch[ , + # TableID := NA + # ] + # rPerfectMatch[ , + # LineNumber := NA + # ] + # rPerfectMatch[ , + # SeriesCode := NA + # ] + # rPerfectMatch[ , + # LineDescription := NA + # ] + # rPerfectMatch[ , + # tier := NA + # ] + # rPerfectMatch[ , + # rootTabLine := NA + # ] + + + rPerfectMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', '", + Parameter, + "' = '", + Key, + "', ...))" + ) + ] + + + + rReasonableMatch <- regionalIndex[ + grep( + searchTerm, + paste( + Desc, + Key, + DatasetName + ), ignore.case=TRUE + ) + ] + + # rReasonableMatch[ , + # TableID := NA + # ] + # rReasonableMatch[ , + # LineNumber := NA + # ] + # rReasonableMatch[ , + # SeriesCode := NA + # ] + # rReasonableMatch[ , + # LineDescription := NA + # ] + # rReasonableMatch[ , + # tier := NA + # ] + # rReasonableMatch[ , + # rootTabLine := NA + # ] + + rReasonableMatch[, + apiCall := + paste0( + "beaGet(list('UserID' = '[your_key]', 'Method' = 'GetData', 'DatasetName' = '", + DatasetName, + "', '", + Parameter, + "' = '", + Key, + "', ...))" + ) + ] + } + + #TODO: figure out how to sort list by var name s.t. it concatenates lazily instead of this if-then stuff + if(!(missingNat) && !(missingReg)){ + searchMatch <- unique( + rbindlist( + list( + # nPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # rPerfectMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # nReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)], + # rReasonableMatch[, .(apiCall, datasetName, TableID, Description, paramType, Key, LineNumber, SeriesCode, LineDescription, rootTabLine)] + nPerfectMatch, + rPerfectMatch, + nReasonableMatch, + rReasonableMatch + ), + use.names = TRUE, + fill = TRUE + ) + ) + } + + if(missingNat && !(missingReg)){ + searchMatch <- unique( + rbindlist( + list( + rPerfectMatch, + rReasonableMatch + ), + use.names = TRUE, + fill = TRUE + ) + ) + } + + if(!(missingNat) && missingReg){ + searchMatch <- unique( + rbindlist( + list( + nPerfectMatch, + nReasonableMatch + ), + use.names = TRUE, + fill = TRUE + ) + ) + } + + if(requireNamespace('DT', quietly = TRUE) && asHtml == TRUE){ + requireNamespace('DT', quietly = TRUE) + searchMatch <- DT::datatable(searchMatch) + } + else{ + if (asHtml == TRUE){ + message('Note: Returning as data.table. You must have package DT installed to return browser-viewable table.') + } + } + return(searchMatch) + }) + } +} diff --git a/R/beaSets.r b/R/beaSets.r index 28a8913..814d843 100644 --- a/R/beaSets.r +++ b/R/beaSets.r @@ -1,22 +1,22 @@ -#' Returns a list of all datasets -#' -#' @param beaKey Your API key -#' @keywords metadata -#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' beaSets(Sys.getenv("BEA_API_KEY")) - -beaSets <- function(beaKey) { - #Set up spec for it - beaMetaSpecs <- list( - 'method' = 'GetDataSetList', - 'UserID' = beaKey , - 'ResultFormat' = 'json' - ) - - #Set list using beaGet - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) - - return(beaResponse) -} +#' Returns a list of all datasets +#' +#' @param beaKey Your API key +#' @keywords metadata +#' @return A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaSets(Sys.getenv("BEA_API_KEY")) + +beaSets <- function(beaKey) { + #Set up spec for it + beaMetaSpecs <- list( + 'method' = 'GetDataSetList', + 'UserID' = beaKey , + 'ResultFormat' = 'json' + ) + + #Set list using beaGet + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = TRUE, asTable = FALSE, isMeta = TRUE) + + return(beaResponse) +} diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 7dce332..0063865 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -1,278 +1,278 @@ -#' Download BEA metadata into library/data folder if needed -#' -#' @param datasetList list of BEA datasets to update local metadata file for (e.g., list('NIPA', 'FixedAssets')) -#' @param beaKey Your API key -#' @keywords metadata search -#' @return Nothing. This updates local .RData files to be used in beaSearch. -#' @import httr data.table -#' @importFrom jsonlite fromJSON -#' @export -#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" -#' beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = Sys.getenv("BEA_API_KEY")) - - -beaUpdateMetadata <- function(datasetList, beaKey){ - - 'Datasetname' <- NULL - 'MetaDataUpdated' <- NULL - 'DatasetName' <- NULL - 'TableID' <- NULL - 'Line' <- NULL - '.' <- NULL - 'SeriesCode' <- NULL - 'RowNumber' <- NULL - 'LineDescription' <- NULL - 'LineNumber' <- NULL - 'ParentLineNumber' <- NULL - 'Tier' <- NULL - 'Path' <- NULL - 'APITable' <- NULL - 'TableName' <- NULL - 'ReleaseDate' <- NULL - 'NextReleaseDate' <- NULL - 'Parameter' <- NULL - 'ParamValue' <- NULL - - #datasetList <- list('nipa','niunderlyingdetail','fixedassets','regionalproduct','regionalincome') - #update as of 2017-07-12: 'regionaldata' dataset removed from API, merged into regionalproduct and regionalincome - - requireNamespace('data.table', quietly = TRUE) - requireNamespace('httr', quietly = TRUE) - requireNamespace('jsonlite', quietly = TRUE) - - beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') - - beaMetaSpecs <- list( - 'UserID' = beaKey , - 'method' = 'GetData', - 'datasetname' = 'APIDatasetMetaData', - 'dataset' = paste(datasetList, collapse = ','), - 'ResultFormat' = 'json' - ) - - #Get as httr response - beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = FALSE, asTable = FALSE, isMeta = TRUE) - - #Check to ensure it is httr response - if(class(beaResponse) != 'response'){ - stop('API metadata not returned. Verify that you are using a valid API key, represented as a character string.', call.=TRUE) - } - - lapply(datasetList, function(outdat){ - try(suppressWarnings(file.remove(paste0(beaMetadataStore,'/', outdat, '.RData'))), silent = TRUE) - }) - - - - #Get JSON String - respStr <- httr::content(beaResponse, as = 'text') - - #Actually, we can get this same info faster using GetParamValsList or something - #The line below should be suppressed if fixed - JSON was malformed due to missing commas - #respStr <- gsub('}{', '},{', respStr, fixed = TRUE) - metaList <-jsonlite::fromJSON(respStr) - metasetInfo <- data.table::as.data.table(metaList$BEAAPI$Datasets) - if(dim(metasetInfo)[1] == 0){ - stop('API metadata not returned. Verify that you are using a valid API key, represented as a character string.', call.=TRUE) - } - - #bind dataset metadata together - #This is a bit of a time drag, so we want to only do it if we need to - #And do it separately for each dataset - if('nipa' %in% tolower(datasetList)){try({ - nipaMDU <- metasetInfo[tolower(Datasetname) == 'nipa', MetaDataUpdated] - nipaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'nipa', APITable]) - nipaTabs[, DatasetName := 'NIPA'] - #TableIDN has become obsolete; we should no longer overwrite to rename - #setnames(nipaTabs, old = names(nipaTabs)[grepl('tableidn', tolower(names(nipaTabs)),fixed = T)], new = 'TableID') - #...however, there does appear to be an issue with capitalization - setnames(nipaTabs, old = names(nipaTabs)[tolower(names(nipaTabs)) == 'tableid'], new = 'TableID') - - #Backend issue: Sometimes, NIPA table 38 has a NULL table for the line descriptions. Handle and warn the user. - handler <- c() - - nipaRowList <- lapply(nipaTabs[, TableID], function(thisTab){ - tabPart <- nipaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] - tryCatch({tabPart[, TableID := thisTab]}, error = function(e){handler <<- c(handler, paste0(e, ': NIPA Table ', thisTab))}) - return(tabPart) - }) - - nipaRows <- data.table::rbindlist(nipaRowList, use.names = TRUE) - - data.table::setkey(nipaTabs, key = TableID) - data.table::setkey(nipaRows, key = TableID) - - nipaIndex <- nipaTabs[nipaRows][,.( - SeriesCode, - RowNumber, - LineDescription, - LineNumber, - ParentLineNumber, - Tier, - Path, - TableID, - DatasetName, - TableName, - ReleaseDate, - NextReleaseDate, - MetaDataUpdated = nipaMDU - )] - save(nipaIndex, file=paste0(beaMetadataStore, '/NIPA.RData')) - })} - - - if('niunderlyingdetail' %in% tolower(datasetList)){try({ - niudMDU <- metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', MetaDataUpdated] - niudTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', APITable]) - niudTabs[, DatasetName := 'NIUnderlyingDetail'] - #TableIDN has become obsolete; we should no longer overwrite to rename - #setnames(niudTabs, old = names(niudTabs)[grepl('tableidn', tolower(names(niudTabs)),fixed = T)], new = 'TableID') - #...however, there does appear to be an issue with capitalization - setnames(niudTabs, old = names(niudTabs)[tolower(names(niudTabs)) == 'tableid'], new = 'TableID') - - niudRows <- data.table::rbindlist(lapply(niudTabs[, TableID], function(thisTab){ - tabPart <- niudTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] - tabPart[, TableID := thisTab] - return(tabPart) - })) - - data.table::setkey(niudTabs, key = TableID) - data.table::setkey(niudRows, key = TableID) - - niudIndex <- niudTabs[niudRows][,.( - SeriesCode, - RowNumber, - LineDescription, - LineNumber, - ParentLineNumber, - Tier, - Path, - TableID, - DatasetName, - TableName, - ReleaseDate, - NextReleaseDate, - MetaDataUpdated = niudMDU - )] - - save(niudIndex, file=paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) - })} - - - if('fixedassets' %in% tolower(datasetList)){try({ - fixaMDU <- metasetInfo[tolower(Datasetname) == 'fixedassets', MetaDataUpdated] - fixaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'fixedassets', APITable]) - fixaTabs[, DatasetName := 'FixedAssets'] - #No TableIDN here - #setnames(fixaTabs, old = names(fixaTabs)[grepl('tableidn', tolower(names(fixaTabs)),fixed = T)], new = 'TableID') - #...however, there does appear to be an issue with capitalization - setnames(fixaTabs, old = names(fixaTabs)[tolower(names(fixaTabs)) == 'tableid'], new = 'TableID') - - fixaRows <- data.table::rbindlist(lapply(fixaTabs[, TableID], function(thisTab){ - tabPart <- fixaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] - tabPart[, TableID := thisTab] - return(tabPart) - })) - - data.table::setkey(fixaTabs, key = TableID) - data.table::setkey(fixaRows, key = TableID) - - fixaIndex <- fixaTabs[fixaRows][,.( - SeriesCode, - RowNumber, - LineDescription, - LineNumber, - ParentLineNumber, - Tier, - Path, - TableID, - DatasetName, - TableName, - ReleaseDate, - NextReleaseDate, - MetaDataUpdated = fixaMDU - )] - - save(fixaIndex, file=paste0(beaMetadataStore, '/FixedAssets.RData')) - })} - - - #Regional data: Treated differently from National data - - #Set "RegionalData" - if('regionaldata' %in% tolower(datasetList)){ - warning('The RegionalData dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); -# try({ -# -# rdatMDU <- metasetInfo[tolower(Datasetname) == 'regionaldata', MetaDataUpdated] -# rdatParam <- metaList$BEAAPI$Datasets$Parameter[[grep('regionaldata', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] -# #rbindlist(rdatParam[[1]])[ParamValue != 'NULL'] -# rdatKeys <- as.data.table(rdatParam$Keycode$ParamValue[[1]]) -# rdatKeys[, Parameter := 'Keycode'] -# rdatFips <- as.data.table(rdatParam$GeoFIPS$ParamValue[[2]]) -# rdatFips[, Parameter := 'GeoFIPS'] -# -# rdatIndex <- rbindlist(list(rdatKeys, rdatFips), use.names = TRUE) -# rdatIndex[, DatasetName := 'RegionalData'] -# rdatIndex[, MetaDataUpdated := rdatMDU] -# -# save(rdatIndex, file=paste0(beaMetadataStore, '/RegionalData.RData')) -# }, silent=TRUE) - } - - #Dataset "RegionalProduct" - if('regionalproduct' %in% tolower(datasetList)){ - warning('The RegionalProduct dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); - #try({ - #rprdMDU <- metasetInfo[tolower(Datasetname) == 'regionalproduct', MetaDataUpdated] - #rprdParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalproduct', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] - #rprdParNms <- attributes(rprdParams)$names - #rprdPages <- data.table::rbindlist(rprdParams)[ParamValue != 'NULL', ParamValue] - #rprdIndex <- data.table::rbindlist(lapply(1:length(rprdPages), function(x){ - # rprdDT <- data.table::as.data.table(rprdPages[[x]]) - # rprdDT[, Parameter := rprdParNms[x]] - # return(rprdDT) - #})) - - #rprdIndex[, DatasetName := 'RegionalProduct'] - #rprdIndex[, MetaDataUpdated := rprdMDU] - #save(rprdIndex, file=paste0(beaMetadataStore, '/RegionalProduct.RData')) - #}, silent = TRUE) - } - - #Dataset "RegionalIncome" - if('regionalincome' %in% tolower(datasetList)){ - message('The RegionalIncome dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); - #try({ - #rincMDU <- metasetInfo[tolower(Datasetname) == 'regionalincome', MetaDataUpdated] - #rincParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalincome', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] - #rincParNms <- attributes(rincParams)$names - #rincPages <- data.table::rbindlist(rincParams)[ParamValue != 'NULL', ParamValue] - #rincIndex <- data.table::rbindlist(lapply(1:length(rincPages), function(x){ - # rincDT <- data.table::as.data.table(rincPages[[x]]) - # rincDT[, Parameter := rincParNms[x]] - # return(rincDT) - #})) - - #rincIndex[, DatasetName := 'RegionalIncome'] - #rincIndex[, MetaDataUpdated := rincMDU] - - # save(rincIndex, file=paste0(beaMetadataStore, '/RegionalIncome.RData')) - # }, silent = TRUE) - } - -# if(length(datasetList) > length(metasetInfo[, Datasetname])){ -# staleList <- datasetList[ -# !(tolower(datasetList) %in% tolower(metasetInfo[, Datasetname])) -# ] -# message('beaR attempted to update metadata for the following dataset(s) which could not be returned from the API: ') -# message(paste( -# toupper(staleList), -# collapse = ', ' -# )) -# message('Removing stale data from local storage...') -## return(staleList) -# }# else {return(list())} - - -} +#' Download BEA metadata into library/data folder if needed +#' +#' @param datasetList list of BEA datasets to update local metadata file for (e.g., list('NIPA', 'FixedAssets')) +#' @param beaKey Your API key +#' @keywords metadata search +#' @return Nothing. This updates local .RData files to be used in beaSearch. +#' @import httr data.table +#' @importFrom jsonlite fromJSON +#' @export +#' @examplesIf interactive() && Sys.getenv("BEA_API_KEY") != "" +#' beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = Sys.getenv("BEA_API_KEY")) + + +beaUpdateMetadata <- function(datasetList, beaKey){ + + 'Datasetname' <- NULL + 'MetaDataUpdated' <- NULL + 'DatasetName' <- NULL + 'TableID' <- NULL + 'Line' <- NULL + '.' <- NULL + 'SeriesCode' <- NULL + 'RowNumber' <- NULL + 'LineDescription' <- NULL + 'LineNumber' <- NULL + 'ParentLineNumber' <- NULL + 'Tier' <- NULL + 'Path' <- NULL + 'APITable' <- NULL + 'TableName' <- NULL + 'ReleaseDate' <- NULL + 'NextReleaseDate' <- NULL + 'Parameter' <- NULL + 'ParamValue' <- NULL + + #datasetList <- list('nipa','niunderlyingdetail','fixedassets','regionalproduct','regionalincome') + #update as of 2017-07-12: 'regionaldata' dataset removed from API, merged into regionalproduct and regionalincome + + requireNamespace('data.table', quietly = TRUE) + requireNamespace('httr', quietly = TRUE) + requireNamespace('jsonlite', quietly = TRUE) + + beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') + + beaMetaSpecs <- list( + 'UserID' = beaKey , + 'method' = 'GetData', + 'datasetname' = 'APIDatasetMetaData', + 'dataset' = paste(datasetList, collapse = ','), + 'ResultFormat' = 'json' + ) + + #Get as httr response + beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = FALSE, asTable = FALSE, isMeta = TRUE) + + #Check to ensure it is httr response + if(class(beaResponse) != 'response'){ + stop('API metadata not returned. Verify that you are using a valid API key, represented as a character string.', call.=TRUE) + } + + lapply(datasetList, function(outdat){ + try(suppressWarnings(file.remove(paste0(beaMetadataStore,'/', outdat, '.RData'))), silent = TRUE) + }) + + + + #Get JSON String + respStr <- httr::content(beaResponse, as = 'text') + + #Actually, we can get this same info faster using GetParamValsList or something + #The line below should be suppressed if fixed - JSON was malformed due to missing commas + #respStr <- gsub('}{', '},{', respStr, fixed = TRUE) + metaList <-jsonlite::fromJSON(respStr) + metasetInfo <- data.table::as.data.table(metaList$BEAAPI$Datasets) + if(dim(metasetInfo)[1] == 0){ + stop('API metadata not returned. Verify that you are using a valid API key, represented as a character string.', call.=TRUE) + } + + #bind dataset metadata together + #This is a bit of a time drag, so we want to only do it if we need to + #And do it separately for each dataset + if('nipa' %in% tolower(datasetList)){try({ + nipaMDU <- metasetInfo[tolower(Datasetname) == 'nipa', MetaDataUpdated] + nipaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'nipa', APITable]) + nipaTabs[, DatasetName := 'NIPA'] + #TableIDN has become obsolete; we should no longer overwrite to rename + #setnames(nipaTabs, old = names(nipaTabs)[grepl('tableidn', tolower(names(nipaTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(nipaTabs, old = names(nipaTabs)[tolower(names(nipaTabs)) == 'tableid'], new = 'TableID') + + #Backend issue: Sometimes, NIPA table 38 has a NULL table for the line descriptions. Handle and warn the user. + handler <- c() + + nipaRowList <- lapply(nipaTabs[, TableID], function(thisTab){ + tabPart <- nipaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] + tryCatch({tabPart[, TableID := thisTab]}, error = function(e){handler <<- c(handler, paste0(e, ': NIPA Table ', thisTab))}) + return(tabPart) + }) + + nipaRows <- data.table::rbindlist(nipaRowList, use.names = TRUE) + + data.table::setkey(nipaTabs, key = TableID) + data.table::setkey(nipaRows, key = TableID) + + nipaIndex <- nipaTabs[nipaRows][,.( + SeriesCode, + RowNumber, + LineDescription, + LineNumber, + ParentLineNumber, + Tier, + Path, + TableID, + DatasetName, + TableName, + ReleaseDate, + NextReleaseDate, + MetaDataUpdated = nipaMDU + )] + save(nipaIndex, file=paste0(beaMetadataStore, '/NIPA.RData')) + })} + + + if('niunderlyingdetail' %in% tolower(datasetList)){try({ + niudMDU <- metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', MetaDataUpdated] + niudTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'niunderlyingdetail', APITable]) + niudTabs[, DatasetName := 'NIUnderlyingDetail'] + #TableIDN has become obsolete; we should no longer overwrite to rename + #setnames(niudTabs, old = names(niudTabs)[grepl('tableidn', tolower(names(niudTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(niudTabs, old = names(niudTabs)[tolower(names(niudTabs)) == 'tableid'], new = 'TableID') + + niudRows <- data.table::rbindlist(lapply(niudTabs[, TableID], function(thisTab){ + tabPart <- niudTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] + tabPart[, TableID := thisTab] + return(tabPart) + })) + + data.table::setkey(niudTabs, key = TableID) + data.table::setkey(niudRows, key = TableID) + + niudIndex <- niudTabs[niudRows][,.( + SeriesCode, + RowNumber, + LineDescription, + LineNumber, + ParentLineNumber, + Tier, + Path, + TableID, + DatasetName, + TableName, + ReleaseDate, + NextReleaseDate, + MetaDataUpdated = niudMDU + )] + + save(niudIndex, file=paste0(beaMetadataStore, '/NIUnderlyingDetail.RData')) + })} + + + if('fixedassets' %in% tolower(datasetList)){try({ + fixaMDU <- metasetInfo[tolower(Datasetname) == 'fixedassets', MetaDataUpdated] + fixaTabs <- data.table::rbindlist(metasetInfo[tolower(Datasetname) == 'fixedassets', APITable]) + fixaTabs[, DatasetName := 'FixedAssets'] + #No TableIDN here + #setnames(fixaTabs, old = names(fixaTabs)[grepl('tableidn', tolower(names(fixaTabs)),fixed = T)], new = 'TableID') + #...however, there does appear to be an issue with capitalization + setnames(fixaTabs, old = names(fixaTabs)[tolower(names(fixaTabs)) == 'tableid'], new = 'TableID') + + fixaRows <- data.table::rbindlist(lapply(fixaTabs[, TableID], function(thisTab){ + tabPart <- fixaTabs[TableID == thisTab, data.table::as.data.table(Line[[1]])] + tabPart[, TableID := thisTab] + return(tabPart) + })) + + data.table::setkey(fixaTabs, key = TableID) + data.table::setkey(fixaRows, key = TableID) + + fixaIndex <- fixaTabs[fixaRows][,.( + SeriesCode, + RowNumber, + LineDescription, + LineNumber, + ParentLineNumber, + Tier, + Path, + TableID, + DatasetName, + TableName, + ReleaseDate, + NextReleaseDate, + MetaDataUpdated = fixaMDU + )] + + save(fixaIndex, file=paste0(beaMetadataStore, '/FixedAssets.RData')) + })} + + + #Regional data: Treated differently from National data + + #Set "RegionalData" + if('regionaldata' %in% tolower(datasetList)){ + warning('The RegionalData dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); +# try({ +# +# rdatMDU <- metasetInfo[tolower(Datasetname) == 'regionaldata', MetaDataUpdated] +# rdatParam <- metaList$BEAAPI$Datasets$Parameter[[grep('regionaldata', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] +# #rbindlist(rdatParam[[1]])[ParamValue != 'NULL'] +# rdatKeys <- as.data.table(rdatParam$Keycode$ParamValue[[1]]) +# rdatKeys[, Parameter := 'Keycode'] +# rdatFips <- as.data.table(rdatParam$GeoFIPS$ParamValue[[2]]) +# rdatFips[, Parameter := 'GeoFIPS'] +# +# rdatIndex <- rbindlist(list(rdatKeys, rdatFips), use.names = TRUE) +# rdatIndex[, DatasetName := 'RegionalData'] +# rdatIndex[, MetaDataUpdated := rdatMDU] +# +# save(rdatIndex, file=paste0(beaMetadataStore, '/RegionalData.RData')) +# }, silent=TRUE) + } + + #Dataset "RegionalProduct" + if('regionalproduct' %in% tolower(datasetList)){ + warning('The RegionalProduct dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); + #try({ + #rprdMDU <- metasetInfo[tolower(Datasetname) == 'regionalproduct', MetaDataUpdated] + #rprdParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalproduct', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] + #rprdParNms <- attributes(rprdParams)$names + #rprdPages <- data.table::rbindlist(rprdParams)[ParamValue != 'NULL', ParamValue] + #rprdIndex <- data.table::rbindlist(lapply(1:length(rprdPages), function(x){ + # rprdDT <- data.table::as.data.table(rprdPages[[x]]) + # rprdDT[, Parameter := rprdParNms[x]] + # return(rprdDT) + #})) + + #rprdIndex[, DatasetName := 'RegionalProduct'] + #rprdIndex[, MetaDataUpdated := rprdMDU] + #save(rprdIndex, file=paste0(beaMetadataStore, '/RegionalProduct.RData')) + #}, silent = TRUE) + } + + #Dataset "RegionalIncome" + if('regionalincome' %in% tolower(datasetList)){ + message('The RegionalIncome dataset has been removed from the API; please use the Regional dataset instead. Searching remaining datasets.'); + #try({ + #rincMDU <- metasetInfo[tolower(Datasetname) == 'regionalincome', MetaDataUpdated] + #rincParams <- metaList$BEAAPI$Datasets$Parameters[[grep('regionalincome', tolower(metaList$BEAAPI$Datasets$Datasetname), fixed=T)]] + #rincParNms <- attributes(rincParams)$names + #rincPages <- data.table::rbindlist(rincParams)[ParamValue != 'NULL', ParamValue] + #rincIndex <- data.table::rbindlist(lapply(1:length(rincPages), function(x){ + # rincDT <- data.table::as.data.table(rincPages[[x]]) + # rincDT[, Parameter := rincParNms[x]] + # return(rincDT) + #})) + + #rincIndex[, DatasetName := 'RegionalIncome'] + #rincIndex[, MetaDataUpdated := rincMDU] + + # save(rincIndex, file=paste0(beaMetadataStore, '/RegionalIncome.RData')) + # }, silent = TRUE) + } + +# if(length(datasetList) > length(metasetInfo[, Datasetname])){ +# staleList <- datasetList[ +# !(tolower(datasetList) %in% tolower(metasetInfo[, Datasetname])) +# ] +# message('beaR attempted to update metadata for the following dataset(s) which could not be returned from the API: ') +# message(paste( +# toupper(staleList), +# collapse = ', ' +# )) +# message('Removing stale data from local storage...') +## return(staleList) +# }# else {return(list())} + + +} diff --git a/R/zzz.R b/R/zzz.R index d47e95b..f35506a 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,4 +1,4 @@ -.onLoad <- function(lib, pkg) { - packageStartupMessage("Note 1: As of February 2018, beaGet() requires 'TableName' for NIPA and NIUnderlyingDetail data instead of 'TableID.' See https://github.us-bea/bea.R for details.") - packageStartupMessage("Note 2: The BEA API no longer releases regional data under the RegionalData, RegionalIncome, or RegionalProduct dataset names; please use 'DatasetName'='Regional' for regional data instead.") -} +.onLoad <- function(lib, pkg) { + packageStartupMessage("Note 1: As of February 2018, beaGet() requires 'TableName' for NIPA and NIUnderlyingDetail data instead of 'TableID.' See https://github.us-bea/bea.R for details.") + packageStartupMessage("Note 2: The BEA API no longer releases regional data under the RegionalData, RegionalIncome, or RegionalProduct dataset names; please use 'DatasetName'='Regional' for regional data instead.") +} diff --git a/README.md b/README.md index f70062d..743abf4 100644 --- a/README.md +++ b/README.md @@ -1,156 +1,156 @@ -# Patch/issue notes - -*GetParameterValuesFiltered method for list of parameters:* If your request returns the error message "The dataset requested requires parameters that were missing from the request" and the `beaParamVals()` method returns a very large number of results, [see the help request here](https://github.com/us-bea/bea.R/pull/5) for an example of how to use `beaGet()` to return a filtered list of parameters. - -*Patch 1.0.5 Note:* The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. - -To find the new parameters to use with TableName, use any one of the following: - -```R - beaSearch('NIPA', '[your 36-digit BEA API key]') - beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') - beaSearch('NIUnderlyingDetail', '[your 36-digit BEA API key]') - beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') -``` - -*Patch 1.0.2 Note:* The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. - - -# Instructions - -Thank you for using BEA's R library. The library is intended to make it easier to retrieve and work with BEA data. - -After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). -## To Install and Load the stable, published version of the bea.R Library (recommended) - -```R - install.packages('bea.R') - library(bea.R) -``` - -## To Install and Load the development version of the bea.R Library (not recommended) - -**Please take the following steps:** - -1. Run the following line of code to install the 'httr' and 'devtools' packages: -```r - install.packages(c('devtools', 'httr')) -``` - -2. Load the packages listed in Step 1 using the 'library' function: -```r - library(httr) - library(devtools) -``` - -3. Install the bea.R library from the BEA GitHub repo: -```r - httr::set_config( config( ssl_verifypeer = 0L )) #zero L - devtools::install_github('us-bea/bea.R') -``` - - -4. Load bea.R using the library function. -```r - library(bea.R) -``` -You are now ready to use bea.R! - -## To Get Started -You must first [register for an API key](http://www.bea.gov/API/signup/index.cfm) from BEA by providing your name and email address. The key will be emailed to you. - -Once you have received your BEA API key, save it to a variable to make it easier to use later: - -```r -beaKey <- 'YOUR 36-DIGIT API KEY' -``` - -## To Use beaSearch and beaGet - -Currently, the bea.R library offers two main methods: beaSearch and beaGet. - -### beaSearch -This method allows you to search for BEA data by keyword. For example, to find all datasets in which the term "personal consumption" appears, use the following: - -```r -beaSearch('personal consumption', beaKey) -``` - -Please note that that beaSearch currently searches only national and regional data. - -You may also specify "asHtml = TRUE" to view in-browser: -```r -beaSearch('gross domestic', beaKey, asHtml = TRUE) -``` - -The contents of this function are automatically updated using a new metadata component of BEA's API; as such, we recommend that you use it with your API key, and the first use of this function requires that you use your key or it will be unable to extract the metadata. - -If you do not wish to automatically update the metadata (e.g., you have conducted a study using the search function), simply searching for the term without also passing your key to the function will do a search only using your locally stored version. - -However, *this approach is not advised.* If you would like to retain metadata for posterity, please copy it from the "bea.R/data" area of your .libPaths() directory to local storage elsewhere on your machine; this will help prevent accidental overwrite, and will not interfere with the "freshness" of your searches. - -### beaGet - -Once you have identified the TableID number and other information, you can use beaGet to access the data. The following code, for example, returns the NIPA table with 2015 data for TableID no. 66. - -```r -beaSpecs <- list( - 'UserID' = beaKey , - 'Method' = 'GetData', - 'datasetname' = 'NIPA', - 'TableName' = 'T20305', - 'Frequency' = 'Q', - 'Year' = 'X', - 'ResultFormat' = 'json' -); -beaPayload <- beaGet(beaSpecs); -``` - -To retrieve a limited selection of multiple years, list all the years you want to retrieve. For example, to retrieve data for 2011-2015, use "Year"="2011,2012,2013,2014,2015" - -The [API documentation](http://www.bea.gov/API/bea_web_service_api_user_guide.htm) includes information about the specific parameters required by beaGET. - -Setting asWide = FALSE gives results closest to the way they are actually returned by the API (every column is a variable, every row is an observation): -```r -beaLong <- beaGet(beaSpecs, asWide = FALSE) -``` - -To return in a format in which each column represents a series, set iTableStyle = FALSE. - -This returns columns named with a concatenation of the descriptive column values, whereas rows are populated with numeric DataValues for each TimePeriod, and has one column named "TimePeriod" filled with dates. -```r -beaStatTab <- beaGet(beaSpecs, iTableStyle = FALSE) -``` - -By default, asWide = TRUE and iTableStyle = TRUE, as this format is the most similar to our iTables; the "beaPayload" object in our first beaGet example at the beginning of this section is in the default format. - - -## To Use beaViz - -The bea.R library also includes an experimental method to create a visual dashboard. This method is still under development. Currently, it is designed to work with the standard R Console interface—not with other interfaces such as R Studio. (However, if you want to experiment with beaViz in R Studio, click on "Open in Browser" at the top of pop-up box after you execute the beaViz method. - -The beaViz method allows you to pass a variable generated from beaGet to create a dashboard. To use the "beaPayload" example given above, enter the following command: - -```r -beaViz(beaPayload) -``` -Please note that beaViz is currently only available for use with the NIPA and NIUnderlyingDetail datasets and the associated metadata. -BEA is open to any thoughts you may have about visually representing BEA data. - - -# About bea.R -bea.R is a library for use with BEA’s API and the R programming language, version 3.2.1 or higher. - -This library serves two core purposes: - -1. To Extract/Transform/Load data [beaGet] from the BEA API as R-friendly formats in the user's workspace. Transformation done by default in beaGet is analogous to the format used in [BEA's iTables](http://www.bea.gov/itable/index.cfm), but this can be modified using beaGet's optional parameters. - -2. To enable the search of descriptive metadata [beaSearch]. - -Other features of the library exist mainly as intermediate methods or are in early stages of development. - - -# Disclaimer -The United States Department of Commerce (DOC) GitHub project code is provided on an ‘as is’ basis and the user assumes responsibility for its use. DOC has relinquished control of the information and no longer has responsibility to protect the integrity, confidentiality, or availability of the information. Any claims against the Department of Commerce stemming from the use of its GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government. - -Use of this library will result in data being stored on users' local machines. Specifically, local copies of BEA API metadata will be stored and automatically updated in the .libPaths() "/bea.R/data" directory in order to improve performance of beaSearch. +# Patch/issue notes + +*GetParameterValuesFiltered method for list of parameters:* If your request returns the error message "The dataset requested requires parameters that were missing from the request" and the `beaParamVals()` method returns a very large number of results, [see the help request here](https://github.com/us-bea/bea.R/pull/5) for an example of how to use `beaGet()` to return a filtered list of parameters. + +*Patch 1.0.5 Note:* The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. + +To find the new parameters to use with TableName, use any one of the following: + +```R + beaSearch('NIPA', '[your 36-digit BEA API key]') + beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') + beaSearch('NIUnderlyingDetail', '[your 36-digit BEA API key]') + beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') +``` + +*Patch 1.0.2 Note:* The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. + + +# Instructions + +Thank you for using BEA's R library. The library is intended to make it easier to retrieve and work with BEA data. + +After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). +## To Install and Load the stable, published version of the bea.R Library (recommended) + +```R + install.packages('bea.R') + library(bea.R) +``` + +## To Install and Load the development version of the bea.R Library (not recommended) + +**Please take the following steps:** + +1. Run the following line of code to install the 'httr' and 'devtools' packages: +```r + install.packages(c('devtools', 'httr')) +``` + +2. Load the packages listed in Step 1 using the 'library' function: +```r + library(httr) + library(devtools) +``` + +3. Install the bea.R library from the BEA GitHub repo: +```r + httr::set_config( config( ssl_verifypeer = 0L )) #zero L + devtools::install_github('us-bea/bea.R') +``` + + +4. Load bea.R using the library function. +```r + library(bea.R) +``` +You are now ready to use bea.R! + +## To Get Started +You must first [register for an API key](http://www.bea.gov/API/signup/index.cfm) from BEA by providing your name and email address. The key will be emailed to you. + +Once you have received your BEA API key, save it to a variable to make it easier to use later: + +```r +beaKey <- 'YOUR 36-DIGIT API KEY' +``` + +## To Use beaSearch and beaGet + +Currently, the bea.R library offers two main methods: beaSearch and beaGet. + +### beaSearch +This method allows you to search for BEA data by keyword. For example, to find all datasets in which the term "personal consumption" appears, use the following: + +```r +beaSearch('personal consumption', beaKey) +``` + +Please note that that beaSearch currently searches only national and regional data. + +You may also specify "asHtml = TRUE" to view in-browser: +```r +beaSearch('gross domestic', beaKey, asHtml = TRUE) +``` + +The contents of this function are automatically updated using a new metadata component of BEA's API; as such, we recommend that you use it with your API key, and the first use of this function requires that you use your key or it will be unable to extract the metadata. + +If you do not wish to automatically update the metadata (e.g., you have conducted a study using the search function), simply searching for the term without also passing your key to the function will do a search only using your locally stored version. + +However, *this approach is not advised.* If you would like to retain metadata for posterity, please copy it from the "bea.R/data" area of your .libPaths() directory to local storage elsewhere on your machine; this will help prevent accidental overwrite, and will not interfere with the "freshness" of your searches. + +### beaGet + +Once you have identified the TableID number and other information, you can use beaGet to access the data. The following code, for example, returns the NIPA table with 2015 data for TableID no. 66. + +```r +beaSpecs <- list( + 'UserID' = beaKey , + 'Method' = 'GetData', + 'datasetname' = 'NIPA', + 'TableName' = 'T20305', + 'Frequency' = 'Q', + 'Year' = 'X', + 'ResultFormat' = 'json' +); +beaPayload <- beaGet(beaSpecs); +``` + +To retrieve a limited selection of multiple years, list all the years you want to retrieve. For example, to retrieve data for 2011-2015, use "Year"="2011,2012,2013,2014,2015" + +The [API documentation](http://www.bea.gov/API/bea_web_service_api_user_guide.htm) includes information about the specific parameters required by beaGET. + +Setting asWide = FALSE gives results closest to the way they are actually returned by the API (every column is a variable, every row is an observation): +```r +beaLong <- beaGet(beaSpecs, asWide = FALSE) +``` + +To return in a format in which each column represents a series, set iTableStyle = FALSE. + +This returns columns named with a concatenation of the descriptive column values, whereas rows are populated with numeric DataValues for each TimePeriod, and has one column named "TimePeriod" filled with dates. +```r +beaStatTab <- beaGet(beaSpecs, iTableStyle = FALSE) +``` + +By default, asWide = TRUE and iTableStyle = TRUE, as this format is the most similar to our iTables; the "beaPayload" object in our first beaGet example at the beginning of this section is in the default format. + + +## To Use beaViz + +The bea.R library also includes an experimental method to create a visual dashboard. This method is still under development. Currently, it is designed to work with the standard R Console interface—not with other interfaces such as R Studio. (However, if you want to experiment with beaViz in R Studio, click on "Open in Browser" at the top of pop-up box after you execute the beaViz method. + +The beaViz method allows you to pass a variable generated from beaGet to create a dashboard. To use the "beaPayload" example given above, enter the following command: + +```r +beaViz(beaPayload) +``` +Please note that beaViz is currently only available for use with the NIPA and NIUnderlyingDetail datasets and the associated metadata. +BEA is open to any thoughts you may have about visually representing BEA data. + + +# About bea.R +bea.R is a library for use with BEA’s API and the R programming language, version 3.2.1 or higher. + +This library serves two core purposes: + +1. To Extract/Transform/Load data [beaGet] from the BEA API as R-friendly formats in the user's workspace. Transformation done by default in beaGet is analogous to the format used in [BEA's iTables](https://www.bea.gov/itable), but this can be modified using beaGet's optional parameters. + +2. To enable the search of descriptive metadata [beaSearch]. + +Other features of the library exist mainly as intermediate methods or are in early stages of development. + + +# Disclaimer +The United States Department of Commerce (DOC) GitHub project code is provided on an ‘as is’ basis and the user assumes responsibility for its use. DOC has relinquished control of the information and no longer has responsibility to protect the integrity, confidentiality, or availability of the information. Any claims against the Department of Commerce stemming from the use of its GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government. + +Use of this library will result in data being stored on users' local machines. Specifically, local copies of BEA API metadata will be stored and automatically updated in the .libPaths() "/bea.R/data" directory in order to improve performance of beaSearch. diff --git a/html/R.css b/html/R.css index f10f5ea..ab8c9bd 100644 --- a/html/R.css +++ b/html/R.css @@ -1,97 +1,97 @@ -body { - background: white; - color: black; -} - -a:link { - background: white; - color: blue; -} - -a:visited { - background: white; - color: rgb(50%, 0%, 50%); -} - -h1 { - background: white; - color: rgb(55%, 55%, 55%); - font-family: monospace; - font-size: x-large; - text-align: center; -} - -h2 { - background: white; - color: rgb(40%, 40%, 40%); - font-family: monospace; - font-size: large; - text-align: center; -} - -h3 { - background: white; - color: rgb(40%, 40%, 40%); - font-family: monospace; - font-size: large; -} - -h4 { - background: white; - color: rgb(40%, 40%, 40%); - font-family: monospace; - font-style: italic; - font-size: large; -} - -h5 { - background: white; - color: rgb(40%, 40%, 40%); - font-family: monospace; -} - -h6 { - background: white; - color: rgb(40%, 40%, 40%); - font-family: monospace; - font-style: italic; -} - -img.toplogo { - width: 4em; - vertical-align: middle; -} - -img.arrow { - width: 30px; - height: 30px; - border: 0; -} - -span.acronym { - font-size: small; -} - -span.env { - font-family: monospace; -} - -span.file { - font-family: monospace; -} - -span.option{ - font-family: monospace; -} - -span.pkg { - font-weight: bold; -} - -span.samp{ - font-family: monospace; -} - -div.vignettes a:hover { - background: rgb(85%, 85%, 85%); -} +body { + background: white; + color: black; +} + +a:link { + background: white; + color: blue; +} + +a:visited { + background: white; + color: rgb(50%, 0%, 50%); +} + +h1 { + background: white; + color: rgb(55%, 55%, 55%); + font-family: monospace; + font-size: x-large; + text-align: center; +} + +h2 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-size: large; + text-align: center; +} + +h3 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-size: large; +} + +h4 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-style: italic; + font-size: large; +} + +h5 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; +} + +h6 { + background: white; + color: rgb(40%, 40%, 40%); + font-family: monospace; + font-style: italic; +} + +img.toplogo { + width: 4em; + vertical-align: middle; +} + +img.arrow { + width: 30px; + height: 30px; + border: 0; +} + +span.acronym { + font-size: small; +} + +span.env { + font-family: monospace; +} + +span.file { + font-family: monospace; +} + +span.option{ + font-family: monospace; +} + +span.pkg { + font-weight: bold; +} + +span.samp{ + font-family: monospace; +} + +div.vignettes a:hover { + background: rgb(85%, 85%, 85%); +} diff --git a/man/bea2List.Rd b/man/bea2List.Rd index 92c19f0..24e4871 100644 --- a/man/bea2List.Rd +++ b/man/bea2List.Rd @@ -23,7 +23,7 @@ userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), 'Method' = 'GetData', 'datasetname' = 'NIPA', 'Frequency' = 'A', - 'TableID' = '68', + 'TableName' = 'T20405', 'Year' = 'X') resp <- beaGet(userSpecList, asTable = FALSE) BL <- bea2List(resp) diff --git a/man/bea2Tab.Rd b/man/bea2Tab.Rd index 78faf1c..af02d4e 100644 --- a/man/bea2Tab.Rd +++ b/man/bea2Tab.Rd @@ -25,7 +25,7 @@ userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), 'Method' = 'GetData', 'datasetname' = 'NIPA', 'Frequency' = 'A', - 'TableID' = '68', + 'TableName' = 'T20405', 'Year' = 'X') resp <- beaGet(userSpecList) BDT <- bea2Tab(resp) diff --git a/man/beaParamVals.Rd b/man/beaParamVals.Rd index 27d8cd4..64f8928 100644 --- a/man/beaParamVals.Rd +++ b/man/beaParamVals.Rd @@ -11,7 +11,7 @@ beaParamVals(beaKey, setName, paramName) \item{setName}{Name of BEA dataset (e.g., NIPA)} -\item{paramName}{Name of BEA dataset parameter (e.g., TableID)} +\item{paramName}{Name of BEA dataset parameter (e.g., TableName)} } \value{ A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. @@ -21,7 +21,7 @@ Gives list of values possible for a given dataset's parameters } \examples{ \dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'keycode') +beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'TableName') \dontshow{\}) # examplesIf} } \keyword{metadata} From c84342e1b9a5f4758725655ef2240a18157b8ff6 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Tue, 1 Apr 2025 14:55:08 -0400 Subject: [PATCH 30/32] update to pass cran check ...without notes. Needed to make some changes to the onLoad and onAttach events and the LICENSE. --- DESCRIPTION | 6 +- LICENSE | 224 +++++++++++++++++++++------------------ NAMESPACE | 28 ++--- R/bea.R | 13 ++- R/bea2List.r | 6 +- R/bea2Tab.r | 4 +- R/beaGet.r | 4 +- R/beaUpdateMetadata.r | 2 +- R/zzz.R | 22 +++- man/bea2List.Rd | 62 +++++------ man/bea2Tab.Rd | 66 ++++++------ man/beaGet.Rd | 96 ++++++++--------- man/beaParamVals.Rd | 54 +++++----- man/beaParams.Rd | 50 ++++----- man/beaSearch.Rd | 54 +++++----- man/beaSets.Rd | 46 ++++---- man/beaUpdateMetadata.Rd | 52 ++++----- 17 files changed, 411 insertions(+), 378 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7d56b2a..8041bc3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -19,16 +19,16 @@ Imports: Description: Provides an R interface for the Bureau of Economic Analysis (BEA) API (see for more information) that serves two core purposes - - 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly + 1. To Extract/Transform/Load data [beaGet()] from the BEA API as R-friendly formats in the user's work space [transformation done by default in beaGet() can be modified using optional parameters; see, too, bea2List(), bea2Tab()]. 2. To enable the search of descriptive meta data [beaSearch()]. Other features of the library exist mainly as intermediate methods or are in early stages of development. Important Note - You must have an API key to use this library. - Register for a key at . + Register for a key at . URL: https://github.com/us-bea/bea.R -License: CC0 +License: file LICENSE LazyData: no Encoding: UTF-8 Roxygen: list(markdown = TRUE) diff --git a/LICENSE b/LICENSE index 70755e3..896a4e3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,117 +1,135 @@ +--------------------------------------------------------------------------- +LICENSE Note +--------------------------------------------------------------------------- +Software code created by U.S. Government employees is not subject to +copyright in the United States (17 U.S.C. §105). The United States/ +Department of Commerce reserve all rights to seek and obtain copyright +protection in countries other than the United States for Software authored +in its entirety by the Department of Commerce. To this end, the Department +of Commerce hereby grants to Recipient a royalty-free, nonexclusive license +to freely use, copy, distribute, and create derivative works of the Software +outside of the United States. The CC0 1.0 Universal License should be taken +to apply to this work inside and outside of the United States. +--------------------------------------------------------------------------- + +Creative Commons Legal Code + CC0 1.0 Universal + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. 4. Limitations and Disclaimers. - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/NAMESPACE b/NAMESPACE index eacee88..b97f731 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,14 +1,14 @@ -# Generated by roxygen2: do not edit by hand - -export(bea2List) -export(bea2Tab) -export(beaGet) -export(beaParamVals) -export(beaParams) -export(beaSearch) -export(beaSets) -export(beaUpdateMetadata) -import(data.table) -import(httr) -importFrom(DT,datatable) -importFrom(jsonlite,fromJSON) +# Generated by roxygen2: do not edit by hand + +export(bea2List) +export(bea2Tab) +export(beaGet) +export(beaParamVals) +export(beaParams) +export(beaSearch) +export(beaSets) +export(beaUpdateMetadata) +import(data.table) +import(httr) +importFrom(DT,datatable) +importFrom(jsonlite,fromJSON) diff --git a/R/bea.R b/R/bea.R index cc1be45..588e700 100644 --- a/R/bea.R +++ b/R/bea.R @@ -16,10 +16,9 @@ # A copy of the GNU General Public License is available at # http://www.r-project.org/Licenses/ -.onLoad <- function(libname, pkgname) { - ns <- .getNamespace(pkgname) - if (is.null(ns)) stop("cannot find namespace environment for ", pkgname, domain = NA) - - dbbase <- file.path(libname, pkgname, "R", pkgname) - lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.") -} \ No newline at end of file +#.onLoad <- function(libname, pkgname) { +# ns <- .getNamespace(pkgname) +# if (is.null(ns)) stop("cannot find namespace environment for ", pkgname, domain = NA) +# dbbase <- file.path(libname, pkgname, "R", pkgname) +# lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.") +#} diff --git a/R/bea2List.r b/R/bea2List.r index b58f676..1bf06e1 100644 --- a/R/bea2List.r +++ b/R/bea2List.r @@ -21,11 +21,11 @@ bea2List <- function(beaPayload, isMeta=FALSE) { requireNamespace('httr', quietly = TRUE) requireNamespace('jsonlite', quietly = TRUE) - if((class(beaPayload) != 'response') && (class(beaPayload) != 'character')){ + if(!inherits(beaPayload, 'response') && !inherits(beaPayload, 'character')){ stop('Submitted variable is not a valid JSON string or httr response class object.', call.=TRUE) } - if(class(beaPayload) == 'response'){ + if(inherits(beaPayload, 'response')){ if(floor(beaPayload$status_code/100) != 2){ stop( paste0('Request failed. Returned HTTP status code: ', beaPayload$status_code), @@ -58,7 +58,7 @@ bea2List <- function(beaPayload, isMeta=FALSE) { stop(paste0('The submitted request was not a valid BEA API response: ', beaContent), call.=TRUE) } #Handler for certain dataset responses having a different structure >:( - if(class(beaResponse$BEAAPI$Results) == 'data.frame'){ + if(inherits(beaResponse$BEAAPI$Results, 'data.frame')){ beaResponse$BEAAPI$Results <- as.list(beaResponse$BEAAPI$Results) beaResponse$BEAAPI$Results$Dimensions <- as.data.frame(beaResponse$BEAAPI$Results$Dimensions) beaResponse$BEAAPI$Results$Notes <- as.data.frame(beaResponse$BEAAPI$Results$Notes) diff --git a/R/bea2Tab.r b/R/bea2Tab.r index 8aa25eb..cc0d164 100644 --- a/R/bea2Tab.r +++ b/R/bea2Tab.r @@ -19,7 +19,7 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { requireNamespace('data.table', quietly = TRUE) - if('response' %in% class(beaPayload)){ + if(inherits(beaPayload, 'response')){ beaResponse <- bea.R::bea2List(beaPayload) } else { beaResponse <- beaPayload @@ -49,7 +49,7 @@ bea2Tab <- function(beaPayload, asWide = TRUE, iTableStyle = TRUE) { } #Convert wide matrix to long #(less common as data comes as long, but needed for beaViz) - if('data.frame' %in% class(beaPayload)){ + if(inherits(beaPayload, 'data.frame')){ if( attributes(beaPayload)$is.wide == TRUE && !asWide diff --git a/R/beaGet.r b/R/beaGet.r index 0192545..75c9522 100644 --- a/R/beaGet.r +++ b/R/beaGet.r @@ -21,7 +21,7 @@ beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=TRUE, isMeta=FALSE, iTableStyle=TRUE) { #, asTS=FALSE - if(class(beaSpec) != 'list'){ + if(!inherits(beaSpec, 'list')){ warning('Please specify API parameters as a list. For example: beaGet(list("UserID" = "YourKey", "Method" = "GetData", [your remaining parameters]))') stop(paste0('Invalid object class passed to beaGet([list of API parameters]): ', class(beaSpec), '. Should be of class "list"'), call.=TRUE) @@ -32,7 +32,7 @@ beaGet <- function(beaSpec, asString=FALSE, asList=FALSE, asTable=TRUE, asWide=T requireNamespace('httr', quietly = TRUE) attributes(beaSpec)$names <- tolower(attributes(beaSpec)$names) - if(class(beaSpec$userid) != 'character'){ + if(!inherits(beaSpec$userid, 'character')){ stop(paste0('Invalid API key of class ', class(beaSpec$userid)), call.=TRUE) } diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 0063865..27da15c 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -54,7 +54,7 @@ beaUpdateMetadata <- function(datasetList, beaKey){ beaResponse <- bea.R::beaGet(beaMetaSpecs, asList = FALSE, asTable = FALSE, isMeta = TRUE) #Check to ensure it is httr response - if(class(beaResponse) != 'response'){ + if(!inherits(beaResponse, 'response')){ stop('API metadata not returned. Verify that you are using a valid API key, represented as a character string.', call.=TRUE) } diff --git a/R/zzz.R b/R/zzz.R index f35506a..a591f45 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,4 +1,20 @@ -.onLoad <- function(lib, pkg) { - packageStartupMessage("Note 1: As of February 2018, beaGet() requires 'TableName' for NIPA and NIUnderlyingDetail data instead of 'TableID.' See https://github.us-bea/bea.R for details.") - packageStartupMessage("Note 2: The BEA API no longer releases regional data under the RegionalData, RegionalIncome, or RegionalProduct dataset names; please use 'DatasetName'='Regional' for regional data instead.") +.onLoad <- function(libname, pkgname) { + # Optionally bypass startup code when R CMD check is running + if (nzchar(Sys.getenv("RCMDCHECK", ""))) return() + + if (system.file("help", package = pkgname) == "") return() + + ns <- .getNamespace(pkgname) + if (is.null(ns)) stop("cannot find namespace environment for ", pkgname, domain = NA) + + dbbase <- file.path(libname, pkgname, "R", pkgname) + lazyLoad(dbbase, ns, filter = function(n) n != ".__NAMESPACE__.") +} +.onAttach <- function(libname, pkgname) { + # startup message + if (interactive()) { + packageStartupMessage("Note 1: As of February 2018, beaGet() requires 'TableName' for NIPA and NIUnderlyingDetail data instead of 'TableID.' See https://github.us-bea/bea.R for details.") + packageStartupMessage("Note 2: The BEA API no longer releases regional data under the RegionalData, RegionalIncome, or RegionalProduct dataset names; please use 'DatasetName'='Regional' for regional data instead.") + invisible() + } } diff --git a/man/bea2List.Rd b/man/bea2List.Rd index 24e4871..6b6bb64 100644 --- a/man/bea2List.Rd +++ b/man/bea2List.Rd @@ -1,31 +1,31 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/bea2List.r -\name{bea2List} -\alias{bea2List} -\title{Convert BEA API httr response payload to list} -\usage{ -bea2List(beaPayload, isMeta = FALSE) -} -\arguments{ -\item{beaPayload}{An object with httr class 'response' from call to BEA API} - -\item{isMeta}{Special parameter meant to interact with metadata functions (default: FALSE)} -} -\value{ -An object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -} -\description{ -Convert BEA API httr response payload to list -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), - 'Method' = 'GetData', - 'datasetname' = 'NIPA', - 'Frequency' = 'A', - 'TableName' = 'T20405', - 'Year' = 'X') -resp <- beaGet(userSpecList, asTable = FALSE) -BL <- bea2List(resp) -\dontshow{\}) # examplesIf} -} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bea2List.r +\name{bea2List} +\alias{bea2List} +\title{Convert BEA API httr response payload to list} +\usage{ +bea2List(beaPayload, isMeta = FALSE) +} +\arguments{ +\item{beaPayload}{An object with httr class 'response' from call to BEA API} + +\item{isMeta}{Special parameter meant to interact with metadata functions (default: FALSE)} +} +\value{ +An object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +} +\description{ +Convert BEA API httr response payload to list +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), + 'Method' = 'GetData', + 'datasetname' = 'NIPA', + 'Frequency' = 'A', + 'TableName' = 'T20405', + 'Year' = 'X') +resp <- beaGet(userSpecList, asTable = FALSE) +BL <- bea2List(resp) +\dontshow{\}) # examplesIf} +} diff --git a/man/bea2Tab.Rd b/man/bea2Tab.Rd index af02d4e..5d7ec87 100644 --- a/man/bea2Tab.Rd +++ b/man/bea2Tab.Rd @@ -1,33 +1,33 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/bea2Tab.r -\name{bea2Tab} -\alias{bea2Tab} -\title{Convert BEA API httr response or list payload to data.table} -\usage{ -bea2Tab(beaPayload, asWide = TRUE, iTableStyle = TRUE) -} -\arguments{ -\item{beaPayload}{An object of class 'list' or httr 'response' returned from beaGet() call to BEA API} - -\item{asWide}{Return data.table in wide format (default: TRUE)} - -\item{iTableStyle}{If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE)} -} -\value{ -An object of class 'data.table' containing data from beaGet(...) with custom attributes(BDT)$params. -} -\description{ -Convert BEA API httr response or list payload to data.table. Also, converts LONG data frame (default API format - see bea2List results) to WIDE data (with years as columns) by default -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), - 'Method' = 'GetData', - 'datasetname' = 'NIPA', - 'Frequency' = 'A', - 'TableName' = 'T20405', - 'Year' = 'X') -resp <- beaGet(userSpecList) -BDT <- bea2Tab(resp) -\dontshow{\}) # examplesIf} -} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bea2Tab.r +\name{bea2Tab} +\alias{bea2Tab} +\title{Convert BEA API httr response or list payload to data.table} +\usage{ +bea2Tab(beaPayload, asWide = TRUE, iTableStyle = TRUE) +} +\arguments{ +\item{beaPayload}{An object of class 'list' or httr 'response' returned from beaGet() call to BEA API} + +\item{asWide}{Return data.table in wide format (default: TRUE)} + +\item{iTableStyle}{If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE)} +} +\value{ +An object of class 'data.table' containing data from beaGet(...) with custom attributes(BDT)$params. +} +\description{ +Convert BEA API httr response or list payload to data.table. Also, converts LONG data frame (default API format - see bea2List results) to WIDE data (with years as columns) by default +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), + 'Method' = 'GetData', + 'datasetname' = 'NIPA', + 'Frequency' = 'A', + 'TableName' = 'T20405', + 'Year' = 'X') +resp <- beaGet(userSpecList) +BDT <- bea2Tab(resp) +\dontshow{\}) # examplesIf} +} diff --git a/man/beaGet.Rd b/man/beaGet.Rd index 3e8ebdc..79ea7b1 100644 --- a/man/beaGet.Rd +++ b/man/beaGet.Rd @@ -1,48 +1,48 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/beaGet.r -\name{beaGet} -\alias{beaGet} -\title{Pass list of user specifications (including API key) to return data from BEA API.} -\usage{ -beaGet( - beaSpec, - asString = FALSE, - asList = FALSE, - asTable = TRUE, - asWide = TRUE, - isMeta = FALSE, - iTableStyle = TRUE -) -} -\arguments{ -\item{beaSpec}{A list of user specifications (required). In this example, 'GetData' specifies that we want data values (rather than metadata), 'NIPA' specifies the dataset, 'A' specifies that we want annual data, 'TableID' = '68' gets a specific table, and 'X' gets all years. See BEA API documentation or use metadata methods for complete lists of parameters.} - -\item{asString}{Return result body as a string (default: FALSE)} - -\item{asList}{Return result body as a list (default: FALSE)} - -\item{asTable}{Return result body as a data.table (default: TRUE)} - -\item{asWide}{Return data.table in wide format (default: TRUE)} - -\item{isMeta}{Special parameter meant to interact with metadata functions (default: FALSE)} - -\item{iTableStyle}{If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE)} -} -\value{ -By default, an object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -} -\description{ -Pass list of user specifications (including API key) to return data from BEA API. -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), - 'Method' = 'GetData', - 'datasetname' = 'NIPA', - 'Frequency' = 'A', - 'TableID' = '68', - 'Year' = 'X') -BDT <- beaGet(userSpecList, asTable = TRUE) -\dontshow{\}) # examplesIf} -} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/beaGet.r +\name{beaGet} +\alias{beaGet} +\title{Pass list of user specifications (including API key) to return data from BEA API.} +\usage{ +beaGet( + beaSpec, + asString = FALSE, + asList = FALSE, + asTable = TRUE, + asWide = TRUE, + isMeta = FALSE, + iTableStyle = TRUE +) +} +\arguments{ +\item{beaSpec}{A list of user specifications (required). In this example, 'GetData' specifies that we want data values (rather than metadata), 'NIPA' specifies the dataset, 'A' specifies that we want annual data, 'TableID' = '68' gets a specific table, and 'X' gets all years. See BEA API documentation or use metadata methods for complete lists of parameters.} + +\item{asString}{Return result body as a string (default: FALSE)} + +\item{asList}{Return result body as a list (default: FALSE)} + +\item{asTable}{Return result body as a data.table (default: TRUE)} + +\item{asWide}{Return data.table in wide format (default: TRUE)} + +\item{isMeta}{Special parameter meant to interact with metadata functions (default: FALSE)} + +\item{iTableStyle}{If "asWide = TRUE", setting "iTableStyle = TRUE" will return data.table in same format as shown on BEA website, with dates and attributes as column headers and series as rows; otherwise, results have series codes as column headers (default: TRUE)} +} +\value{ +By default, an object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +} +\description{ +Pass list of user specifications (including API key) to return data from BEA API. +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), + 'Method' = 'GetData', + 'datasetname' = 'NIPA', + 'Frequency' = 'A', + 'TableName' = 'T20405', + 'Year' = 'X') +BDT <- beaGet(userSpecList, asTable = TRUE) +\dontshow{\}) # examplesIf} +} diff --git a/man/beaParamVals.Rd b/man/beaParamVals.Rd index 64f8928..b1d2100 100644 --- a/man/beaParamVals.Rd +++ b/man/beaParamVals.Rd @@ -1,27 +1,27 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/beaParamVals.r -\name{beaParamVals} -\alias{beaParamVals} -\title{Gives list of values possible for a given dataset's parameters} -\usage{ -beaParamVals(beaKey, setName, paramName) -} -\arguments{ -\item{beaKey}{Your API key} - -\item{setName}{Name of BEA dataset (e.g., NIPA)} - -\item{paramName}{Name of BEA dataset parameter (e.g., TableName)} -} -\value{ -A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -} -\description{ -Gives list of values possible for a given dataset's parameters -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'TableName') -\dontshow{\}) # examplesIf} -} -\keyword{metadata} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/beaParamVals.r +\name{beaParamVals} +\alias{beaParamVals} +\title{Gives list of values possible for a given dataset's parameters} +\usage{ +beaParamVals(beaKey, setName, paramName) +} +\arguments{ +\item{beaKey}{Your API key} + +\item{setName}{Name of BEA dataset (e.g., NIPA)} + +\item{paramName}{Name of BEA dataset parameter (e.g., TableName)} +} +\value{ +A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +} +\description{ +Gives list of values possible for a given dataset's parameters +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'TableName') +\dontshow{\}) # examplesIf} +} +\keyword{metadata} diff --git a/man/beaParams.Rd b/man/beaParams.Rd index 865ab4b..58f275e 100644 --- a/man/beaParams.Rd +++ b/man/beaParams.Rd @@ -1,25 +1,25 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/beaParams.r -\name{beaParams} -\alias{beaParams} -\title{Gives list of parameters possible for a given dataset} -\usage{ -beaParams(beaKey, setName) -} -\arguments{ -\item{beaKey}{Your API key} - -\item{setName}{Name of BEA dataset (e.g., 'NIPA')} -} -\value{ -A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -} -\description{ -Gives list of parameters possible for a given dataset -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -beaParams(Sys.getenv("BEA_API_KEY"), 'NIPA') -\dontshow{\}) # examplesIf} -} -\keyword{metadata} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/beaParams.r +\name{beaParams} +\alias{beaParams} +\title{Gives list of parameters possible for a given dataset} +\usage{ +beaParams(beaKey, setName) +} +\arguments{ +\item{beaKey}{Your API key} + +\item{setName}{Name of BEA dataset (e.g., 'NIPA')} +} +\value{ +A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +} +\description{ +Gives list of parameters possible for a given dataset +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaParams(Sys.getenv("BEA_API_KEY"), 'NIPA') +\dontshow{\}) # examplesIf} +} +\keyword{metadata} diff --git a/man/beaSearch.Rd b/man/beaSearch.Rd index 60ea5ab..4c99537 100644 --- a/man/beaSearch.Rd +++ b/man/beaSearch.Rd @@ -1,27 +1,27 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/beaSearch.r -\name{beaSearch} -\alias{beaSearch} -\title{Search a selection of indexed BEA data table names, series labels, and series codes.} -\usage{ -beaSearch(searchTerm, beaKey = NULL, asHtml = FALSE) -} -\arguments{ -\item{searchTerm}{A word or phrase of class 'character' to be found in BEA datasets} - -\item{beaKey}{Character string representation of user API key. Necessary for first time use and updates; recommended for anything beyond one-off searches from the console.} - -\item{asHtml}{Option to return results as DT markup, viewable in browser. Allows search WITHIN YOUR ALREADY-FILTERED RESULTS ONLY. Requires package 'DT' to be installed.} -} -\value{ -An object of class 'data.table' with information about all indexed sets in which the search term was found. -} -\description{ -Searches indexed dataset table name, label, and series codes. CAUTION: Currently only searches within NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets). -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -beaSearch('gross domestic product', beaKey = Sys.getenv("BEA_API_KEY"), asHtml = TRUE) -\dontshow{\}) # examplesIf} -} -\keyword{search} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/beaSearch.r +\name{beaSearch} +\alias{beaSearch} +\title{Search a selection of indexed BEA data table names, series labels, and series codes.} +\usage{ +beaSearch(searchTerm, beaKey = NULL, asHtml = FALSE) +} +\arguments{ +\item{searchTerm}{A word or phrase of class 'character' to be found in BEA datasets} + +\item{beaKey}{Character string representation of user API key. Necessary for first time use and updates; recommended for anything beyond one-off searches from the console.} + +\item{asHtml}{Option to return results as DT markup, viewable in browser. Allows search WITHIN YOUR ALREADY-FILTERED RESULTS ONLY. Requires package 'DT' to be installed.} +} +\value{ +An object of class 'data.table' with information about all indexed sets in which the search term was found. +} +\description{ +Searches indexed dataset table name, label, and series codes. CAUTION: Currently only searches within NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets). +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaSearch('gross domestic product', beaKey = Sys.getenv("BEA_API_KEY"), asHtml = TRUE) +\dontshow{\}) # examplesIf} +} +\keyword{search} diff --git a/man/beaSets.Rd b/man/beaSets.Rd index c67d74c..102628d 100644 --- a/man/beaSets.Rd +++ b/man/beaSets.Rd @@ -1,23 +1,23 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/beaSets.r -\name{beaSets} -\alias{beaSets} -\title{Returns a list of all datasets} -\usage{ -beaSets(beaKey) -} -\arguments{ -\item{beaKey}{Your API key} -} -\value{ -A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. -} -\description{ -Returns a list of all datasets -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -beaSets(Sys.getenv("BEA_API_KEY")) -\dontshow{\}) # examplesIf} -} -\keyword{metadata} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/beaSets.r +\name{beaSets} +\alias{beaSets} +\title{Returns a list of all datasets} +\usage{ +beaSets(beaKey) +} +\arguments{ +\item{beaKey}{Your API key} +} +\value{ +A metadata object of class 'list' of several dimensions. View list structure using 'str(yourList)'. +} +\description{ +Returns a list of all datasets +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaSets(Sys.getenv("BEA_API_KEY")) +\dontshow{\}) # examplesIf} +} +\keyword{metadata} diff --git a/man/beaUpdateMetadata.Rd b/man/beaUpdateMetadata.Rd index 45c6bc4..c50a8eb 100644 --- a/man/beaUpdateMetadata.Rd +++ b/man/beaUpdateMetadata.Rd @@ -1,26 +1,26 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/beaUpdateMetadata.r -\name{beaUpdateMetadata} -\alias{beaUpdateMetadata} -\title{Download BEA metadata into library/data folder if needed} -\usage{ -beaUpdateMetadata(datasetList, beaKey) -} -\arguments{ -\item{datasetList}{list of BEA datasets to update local metadata file for (e.g., list('NIPA', 'FixedAssets'))} - -\item{beaKey}{Your API key} -} -\value{ -Nothing. This updates local .RData files to be used in beaSearch. -} -\description{ -Download BEA metadata into library/data folder if needed -} -\examples{ -\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} -beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = Sys.getenv("BEA_API_KEY")) -\dontshow{\}) # examplesIf} -} -\keyword{metadata} -\keyword{search} +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/beaUpdateMetadata.r +\name{beaUpdateMetadata} +\alias{beaUpdateMetadata} +\title{Download BEA metadata into library/data folder if needed} +\usage{ +beaUpdateMetadata(datasetList, beaKey) +} +\arguments{ +\item{datasetList}{list of BEA datasets to update local metadata file for (e.g., list('NIPA', 'FixedAssets'))} + +\item{beaKey}{Your API key} +} +\value{ +Nothing. This updates local .RData files to be used in beaSearch. +} +\description{ +Download BEA metadata into library/data folder if needed +} +\examples{ +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = Sys.getenv("BEA_API_KEY")) +\dontshow{\}) # examplesIf} +} +\keyword{metadata} +\keyword{search} From e11e096ff9cb6293d63fd72cbf4f3a7eb3d5ebab Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Thu, 3 Apr 2025 13:39:05 -0400 Subject: [PATCH 31/32] Updated DESCRIPTION --- DESCRIPTION | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8041bc3..1b85233 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -25,10 +25,20 @@ Description: Provides an R interface for the Bureau of Economic Analysis (BEA) 2. To enable the search of descriptive meta data [beaSearch()]. Other features of the library exist mainly as intermediate methods or are in early stages of development. - Important Note - You must have an API key to use this library. + Important Note - You must have an API key to use this library. Register for a key at . + As a note regarding the license: + Software code created by U.S. Government employees is not subject to + copyright in the United States (17 U.S.C. §105). The United States/ + Department of Commerce reserve all rights to seek and obtain copyright + protection in countries other than the United States for Software authored + in its entirety by the Department of Commerce. To this end, the Department + of Commerce hereby grants to Recipient a royalty-free, nonexclusive license + to freely use, copy, distribute, and create derivative works of the Software + outside of the United States. The CC0 1.0 Universal License should be taken + to apply to this work inside and outside of the United States. URL: https://github.com/us-bea/bea.R -License: file LICENSE +License: CC0 LazyData: no Encoding: UTF-8 Roxygen: list(markdown = TRUE) From 1cceafe845534447d10c80b70cf7a8e661dd8786 Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Mon, 5 May 2025 12:39:45 -0400 Subject: [PATCH 32/32] update local metadata path --- R/beaUpdateMetadata.r | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/beaUpdateMetadata.r b/R/beaUpdateMetadata.r index 27da15c..2a43876 100644 --- a/R/beaUpdateMetadata.r +++ b/R/beaUpdateMetadata.r @@ -40,7 +40,7 @@ beaUpdateMetadata <- function(datasetList, beaKey){ requireNamespace('httr', quietly = TRUE) requireNamespace('jsonlite', quietly = TRUE) - beaMetadataStore <- paste0(.libPaths()[1], '/beaR/data') + beaMetadataStore <- paste0(.libPaths()[1], '/bea.R/data') beaMetaSpecs <- list( 'UserID' = beaKey ,
  • R<9EC+iu@pnN_)M|a1wnN&oMl5A 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%0A9(xC1MNkfgL+w{b9FQ^4dFH$hOSDcwusVgY3 z->&o6B&Zj=l;wZBENdh|CdH(54*UrgzKj==B$|Nb=M( zSdVw+!dk-0@^W(Ny|aT&DnZl7e2#e4ONRBU(_~A8#ef%%0e^S^D%xW z4`WY2tNNDrTy6?|$;Oj-L8|#KhhTn5J~WROpWe^l?U(n5i{UgxvzccLWu8j!WfOfn zEOU?Dzd4Y2$gxDvqT@jJl{MaF)`e^^6ptUDsfUm$2OoQ#2SjMv$}CMF^@L#mx(zM$ z7y)w(NpC0(L`m!oCAlKq8=~DXZ3DtjN_>v^=M+h#sl-BGevqjpTMs3%Ig=2+WJBDD zzfF4v&I3`sKF@PmlL8Xj2Ovh!)G5gu02ry&R6J;D=#}dRnTtt9B1Lj7i|G!SWr(ap z%ajQR);mK`lpNaNm z0!g^8XLnSRD#nmf8LCjy5zmJ0^U!HtXxESgL~6o}qN@Pbnm|tqR;9w5K0=gnVR`wK zhBZR^CZutZ+A6M!O!*>)8is4dTqB|*Le9ir$aK}u=TZ$yIs$h@upBZB)}dk=QaMwD zw+DR&=RQiYP)0=!wVA_Z!7~|W`eby#i+F`h7%uTp){Z{gr{;c-@W-fEqLH>lZwOX{ zSHY{WRe(3gA+tv3!`VLf^;%L6n%mLmpG(XP%o2Mr)cQ3tUZp^X?{!pePVCbM$~9Aj z5Go{PpVMT(l6ptjC=NP5J2sHEc-q_I+ zE6_~2QI(2~z-D2Scj9yeT~axF=@9sS=jv_--aN`UG7aN}^Unyh-FhQrC@>@j7TQ#% z2R;;7=C3n_XjEL;DwwD0brNn&t4WJzG>&KD9ewa^<0%S_AVm(KP=T0xzVQR7P|C4H=5nM$pCIMp!LaCy*7n z6&4kjD;y9Sj-*>XhqD>n?h3 zEG%!iZN+XiEL@!D7S3VZVIp9JFj0$KG0HG45SbLIV5DHu7n(K;OW#Q+NFNjCH2q|J z_p+(su7Td=>GD8BKg-C%+2WKOqe4$pq;`6qbNP$QqQ-JX2MJ=AeDcl>o&PAe!zv*l zp)ZkZ`Pi~$vavqNKgK`Hzx05QDvVf#&oo~r-^xzi`0}usxLKveb~E$U_*|y)YW-3( z7dm}(`4yagHl!d$9b-TarDwn{e0yNwRoz@L9f3K`?wMF|R z3Lj2WNFB3`#XH`2j-3n9-H=j9gR7pTkJNj|X{Te)J8h7Gitv}~mIfCBMQbdu zR)JMj74ud#=6V)RmTFd)t*FF{DMQr3b8!-rlN0{=Uz}EaByUL)WHLy$ykVOZoRpl< z6C1Y}u(;Y1*r)d{$;r$`%2xkba*YB)VK!&66_Wz5ns>b5MOC{5?~1Kp=P7h-I(U#0<$%WK21E$Z=K`2P-iBt?dBhv`uj^GbqNuxqp}v9mW9dld9&38mr98W3mqTzEmJbF%AJw_f)|*II05oKFle zIeW3*{d^seL6*Upev$qgeKNlof22UQ;9N?6s{SUzH?}d0F+J^3+I5rgk+6}Q(9EhP zC-FdZu!>AtvtX04BGWgWFJxYkR+0IvyR4U4(c&uN`u185n-vEYUn+eN`t!9*flbua zN!4W+%|v}L>mU7#zErd4P=VR&rJPZH@1>i2?S_Z?Bl=@ALwdw}&-Vv337{^SHG3Wx z9zA``WtB<6PrgsoF@<_Iiqddha@%+hZ?-#0(vMticTp2mTTtVUv*;RchI}iTEsebY z^y1;A3zw+Z+gE4T*e2JW96CP4I_WLH;d(E(hTN%WuNV)=-@Ph&&Gc$z@)P}9bU}Mj z9;RjS*!obxq}y!zp=X)%W7CppLph(&Ae+xQb8WZS7VhTV-HWb`ULW%xsTp?~Pv`FD z7?3`ylCNssbLk#Wq#~zMqvB5foRq*pB|ACnIQr&I!HCIgN-2uWq9ir0hOdb$Qujrp zM5`ZHjpfaKsQtWOiOz4~l$i<2JLI23y!5erfBBi=B>7bC?&|KHr2V9u1D^-38=u$n z@|p0i4npsIyE*J!R65X;B@DYHof+aib7i1zV*BAz5wO#mWhLoTu)D`-*OVN-+_&3} zKbDRl)pda11^1KDgtP`jYNSrZwS9 zk^yQN%B!^t{wrIq&nfA1B|PoUI!QYoj@~>fnlD;lC}BuUwNEW7dRycsZ}kmz zvCB3gOIY|+{4+1YaAiVnHCb_$0;YCGvl*nTjfcOS9j|J#zJ;CGv}qYF_Gwn z_gq2Gea8>wSHE=zE|RQ9$0hr7H^}>i_}AWOeDXOHw+7vd*gpKl8uX{oV)qm_L|Z?oPin z98tpo)>Gamxy^E{tYrsj;E0^JRqX)HBP6+XXOh$q-WSQI?J<`mze-pLNZn%eb{l4I zXgv|`i8p)IyIpC#HR>i<(7EKKR&tLYA$tg!y{FE`e3$cLqXFM^(FZ}{*Ykm{o6)!J zIQi#MKA7hhR4h&wm7{?^0I@bmxDw3(>-0Z ztg?McfUq#{j3RY!)OZt<9%?lDEY#%wJtfC$U$MZvyu{*SKJsdOh( ziSYF}mUV-Q<|(sJr#BqZ>u76rC5fmuz`SdsM0-*$aBD!xMG#UCWo)576*JsrQU$2? zE>*11)$XDBtJMO%;=Tfx26f%pUe-K0drVO{a>FzAiB$l6J>BYA?Z%v9=e;d!C&tHh zUaUJlM_7EBJ7UIfw!x$JwO-j=seKPbDF&XKoO$99AZTMOX~k>l&$`$15koCRlt!H< z#2eE}2l1d7NbOs|u8}d`F9#;aFEG^;5EguWd+R}^<4pT?0uGX%*+*8iH>@ax-Y?YT z5HaugvbB|;n|4&GmM$RoY9TNzDWjmQCqIg7xt}F>E`0^=Hteh>y{oO~?0$a|5j`oS zoXM>8@|qqz^8v}r%Zg-Mg_d<(rjH3y=Gh zOL$@Dd0hV_|t&DF`eZ~fX{YFBpS6B z#oEyFii5K|1aEH8TwO)rKIWkI#n!;B@fGs!xt9e~>RnG7G!zON1BF-aKxFwpl8{kL zaEkB=t^3e5-Z$P`SsASF6GCA~)>xlR>Rnnj3&+168LZ5ba)}l?SxDbmEAH_5;u0mX zD|*AXU!~!TZ)e`Rf748AoBH#6L;dW=n)*y@`tcqCjHLNyH!U-ifjnzQEN^?dbpyt9 z1J)@!y>{G^=Aa`D&#%Tj&s3tOL6O!~lQB>%`TnIt^NH5YM_cf2U=@^k1t zg>U#d)Su{R8N+l91&`=-gEaY{Xv-L*E;6?$WCj=bI|mipdg%E{5$wV& z?8OS)Jo*Bl18Tjw! zsl6r=9g@5lSDcc@xu z)R9d29IKu?y@c5xTH_EEuyLb(eN8+=1=f?LgNa zZASYk$9*t6QL;G>_`1D1YguIA1Tds$hTV{+NF~s`rK(0*?+jk$<#oEN__a5xXoqFG z?8?4q^vedTV&tg8D@?@VW4LR4J>Uf11aDMG6ZFOUT^x2NPRkRmPqPcJ(bq|fG{^OdD&~~=> zE^z2ze0A$JnX=9|Y8+_7qAWKgmAdkSBTb>+k7RCrq(x})**?G}_&IDcKw@|*9Z@1^ z;1;RxNY@pyNOnQUqu^rtHjBBX0XwtB;_R&WBq@K;`>`uZiENGtDU=J<^_8o_SD?`t zTHx$sVHenl;!%T$xB~2ciT~NL{u&=IxOommNk}neOF!+&V!eIdW9_K z-`~A_w81RELgblrcJAqeiTd|fE-@uoJ#B8DBp7x-u}SJ39$7kO*{Qy9CMzs^p6imC z`8*qSMYNntqV943d?1vh>a*r>+H>`Y@LCeyIOg>w*4-VrUM~bBxe7B$EN&(g*;#dY zZq=}?-P^SIsqfs~0DOSAqle0StHo**g2Xe?epK{e;0s6tCa?i=_^_qjjAvzMb>;d| zq?w#iud?5mxzl}OP~rOhP9s5|G#*gQxAdpF-Rap0YiA%l7w=xUwfwr3*+<9arDNfl z%CZ34jB@0QP%3ntGSSEr)7N1#gtOf%4ujpQjC1#BQ8GnlO&$)R)qYcn;t`E@(drck zlvACJEHZs4KJT{^%SqYEQ_)vZ_J*pCN8VRz>ORI7Xg==E*%qLEPNs#4FR zC5lXwDD(ao7fSs~-usNqvi)n}17WGW+(K+ex5vAo0-NW{6R%}=_)s~#88OYfG1uzB zP#0`+BkG04&6Wv{Rg|HXpT9ikM$75EN1-B|6EVSYQcen$nuJd&Y9cJiLOK9b9_*0Ot#cTH3jNVO z(AM>^>DuR`{SQR1So$bNRqlp*AX+Ba%Cj7H7;hWIQOdR6T1(pM)nwzA8^}I6?rhZ) zo)#_}8dht#ett~9kS_@5>O zXgrua6hwQb#Zw`sSIguE)EU)Pz(8>mI~#j-W?L8FT`B%ZRVc?*O@rj!`sD77?tGkhYb zL1F>6NCzi3Io^$i7G8i8LXOu=LKmd#u7Y%Q()9O48vE;+*!jEI!4SL(^5n9&&!@#eUch$}tcx74(&-0)xvl{~1?`ChNQg;_+JV3l zxZEf)Ty6kNO5y@8#SJV81VMmcaZwON1`3ja!2U?J;*~$mx{~!o*vlBHs{bwy_a?{d zh{d|g0D(R}K4L!NVrWkXAQ%RNow9*IL~#_N7(X{G+*i~M!}lALKlrF3F?OC#?pPt>`=nHqpRRaC8lKW3q{iPD_1Fn+zFDv0B>FWNoELT_Hp8%XHf+dD)!;fe}NX?R@`9>A%YS zuJnJZCyQ$q8I@DekgB*p`BMiM1%pJvQYK)WcY|a=Fi{Xx1_Y7?{s-j`kbdw$dzzrp zD0u_p?`|t0hCrbJrbtiBsRK)hLBt?GarvG0KiKG^5l;4g{~J|)qWp;m&N*ZZJkba* zJEW()5)MIII2NGlguyzYP)J{aF2oOkAS_)<-3W0%;AegP4G#C#5gYQpuf9Ly~2mCZv zeD|~8N^v6*ZV&|iIST&G1;6)?|LcE04F137{1dp;IPZa-!>nAY& z{qetW{X0fKQT!LKpTPL{$N$3h?->0=@lSA(|JX<2?vKdv`rvj+zu2dpUSs*U4db8D zPzlL@+WSJF#=i$cf&J$VL1TLZI>Jek5Ik~XVU{p023poqZX=5uCEPbMvMf;!B(yeo zj*QgAzt9Q%(`AnTMTk}!^iNs^Cbh-2gJ=~)kZ!uvg{c*nuc!*GsVUvOyu+)hTfsug zc}K@WA*A7n!^VbOmNj0x^JU3=*_hGb;VP@rm$y`aH>1jK=hVLlk+ zFZH)8Qj*etzZV6T{%w!{5BH+*2n5wPJ1BK16Q~r!Tt#ENn7fg31pF)mp|$rF!+eNh vB#2Z=@vHAAk@P~sN!4lFT1ojcj>GFtBM;AW$-uwxo}aEsfx(i0UX=QO5Zf?F diff --git a/man/bea2List.Rd b/man/bea2List.Rd index 6b6b2df..92c19f0 100644 --- a/man/bea2List.Rd +++ b/man/bea2List.Rd @@ -18,7 +18,8 @@ An object of class 'list' of several dimensions. View list structure using 'str( Convert BEA API httr response payload to list } \examples{ -userSpecList <- list('UserID' = 'yourKey' , +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), 'Method' = 'GetData', 'datasetname' = 'NIPA', 'Frequency' = 'A', @@ -26,4 +27,5 @@ userSpecList <- list('UserID' = 'yourKey' , 'Year' = 'X') resp <- beaGet(userSpecList, asTable = FALSE) BL <- bea2List(resp) +\dontshow{\}) # examplesIf} } diff --git a/man/bea2Tab.Rd b/man/bea2Tab.Rd index ced6eaa..78faf1c 100644 --- a/man/bea2Tab.Rd +++ b/man/bea2Tab.Rd @@ -20,7 +20,8 @@ An object of class 'data.table' containing data from beaGet(...) with custom att Convert BEA API httr response or list payload to data.table. Also, converts LONG data frame (default API format - see bea2List results) to WIDE data (with years as columns) by default } \examples{ -userSpecList <- list('UserID' = 'yourKey' , +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), 'Method' = 'GetData', 'datasetname' = 'NIPA', 'Frequency' = 'A', @@ -28,4 +29,5 @@ userSpecList <- list('UserID' = 'yourKey' , 'Year' = 'X') resp <- beaGet(userSpecList) BDT <- bea2Tab(resp) +\dontshow{\}) # examplesIf} } diff --git a/man/beaGet.Rd b/man/beaGet.Rd index ecdb83d..3e8ebdc 100644 --- a/man/beaGet.Rd +++ b/man/beaGet.Rd @@ -36,11 +36,13 @@ By default, an object of class 'list' of several dimensions. View list structure Pass list of user specifications (including API key) to return data from BEA API. } \examples{ -userSpecList <- list('UserID' = 'yourAPIKey' , +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +userSpecList <- list('UserID' = Sys.getenv("BEA_API_KEY"), 'Method' = 'GetData', 'datasetname' = 'NIPA', 'Frequency' = 'A', 'TableID' = '68', 'Year' = 'X') BDT <- beaGet(userSpecList, asTable = TRUE) +\dontshow{\}) # examplesIf} } diff --git a/man/beaParamVals.Rd b/man/beaParamVals.Rd index ac1fed8..27d8cd4 100644 --- a/man/beaParamVals.Rd +++ b/man/beaParamVals.Rd @@ -20,6 +20,8 @@ A metadata object of class 'list' of several dimensions. View list structure usi Gives list of values possible for a given dataset's parameters } \examples{ -beaParamVals('yourAPIkey', 'NIPA', 'keycode') +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaParamVals(Sys.getenv("BEA_API_KEY"), 'NIPA', 'keycode') +\dontshow{\}) # examplesIf} } \keyword{metadata} diff --git a/man/beaParams.Rd b/man/beaParams.Rd index 99ff79f..865ab4b 100644 --- a/man/beaParams.Rd +++ b/man/beaParams.Rd @@ -18,6 +18,8 @@ A metadata object of class 'list' of several dimensions. View list structure usi Gives list of parameters possible for a given dataset } \examples{ -beaParams('yourAPIkey', 'NIPA') +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaParams(Sys.getenv("BEA_API_KEY"), 'NIPA') +\dontshow{\}) # examplesIf} } \keyword{metadata} diff --git a/man/beaSearch.Rd b/man/beaSearch.Rd index 2da229f..60ea5ab 100644 --- a/man/beaSearch.Rd +++ b/man/beaSearch.Rd @@ -20,6 +20,8 @@ An object of class 'data.table' with information about all indexed sets in which Searches indexed dataset table name, label, and series codes. CAUTION: Currently only searches within NATIONAL datasets (NIPA, NIUnderlyingDetail, FixedAssets). } \examples{ -beaSearch('gross domestic product', asHtml = TRUE) +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaSearch('gross domestic product', beaKey = Sys.getenv("BEA_API_KEY"), asHtml = TRUE) +\dontshow{\}) # examplesIf} } \keyword{search} diff --git a/man/beaSets.Rd b/man/beaSets.Rd index daa64d8..c67d74c 100644 --- a/man/beaSets.Rd +++ b/man/beaSets.Rd @@ -16,6 +16,8 @@ A metadata object of class 'list' of several dimensions. View list structure usi Returns a list of all datasets } \examples{ -beaSets('yourAPIkey') +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaSets(Sys.getenv("BEA_API_KEY")) +\dontshow{\}) # examplesIf} } \keyword{metadata} diff --git a/man/beaUpdateMetadata.Rd b/man/beaUpdateMetadata.Rd index fae99ad..45c6bc4 100644 --- a/man/beaUpdateMetadata.Rd +++ b/man/beaUpdateMetadata.Rd @@ -18,7 +18,9 @@ Nothing. This updates local .RData files to be used in beaSearch. Download BEA metadata into library/data folder if needed } \examples{ -beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = 'yourAPIkey') +\dontshow{if (interactive() && Sys.getenv("BEA_API_KEY") != "") (if (getRversion() >= "3.4") withAutoprint else force)(\{ # examplesIf} +beaUpdateMetadata(list('NIUnderlyingDetail', 'NIPA'), beaKey = Sys.getenv("BEA_API_KEY")) +\dontshow{\}) # examplesIf} } \keyword{metadata} \keyword{search} From 3910e6fa5deafe8a746e5fcdb7d36302448c78fc Mon Sep 17 00:00:00 2001 From: Andrea Julca Batch Date: Thu, 30 Jan 2025 21:18:20 -0500 Subject: [PATCH 28/32] Update documentation. --- README.md | 156 ++++++++++++++++++++++++++++++++++++++++++ beaR_Manual.pdf | Bin 0 -> 121747 bytes beaR_instructions.pdf | Bin 0 -> 14055 bytes 3 files changed, 156 insertions(+) create mode 100644 README.md create mode 100644 beaR_Manual.pdf create mode 100644 beaR_instructions.pdf diff --git a/README.md b/README.md new file mode 100644 index 0000000..f70062d --- /dev/null +++ b/README.md @@ -0,0 +1,156 @@ +# Patch/issue notes + +*GetParameterValuesFiltered method for list of parameters:* If your request returns the error message "The dataset requested requires parameters that were missing from the request" and the `beaParamVals()` method returns a very large number of results, [see the help request here](https://github.com/us-bea/bea.R/pull/5) for an example of how to use `beaGet()` to return a filtered list of parameters. + +*Patch 1.0.5 Note:* The parameter used to make a beaGet() call for NIPA and NIUnderlyingDetail data sets have changed as of February 2018. "TableID" has been discontinued, and "TableName" has been added, with parameter values that differ from the obsolete TableID values. + +To find the new parameters to use with TableName, use any one of the following: + +```R + beaSearch('NIPA', '[your 36-digit BEA API key]') + beaParamVals('[your 36-digit BEA API key]', 'NIPA', 'TableName') + beaSearch('NIUnderlyingDetail', '[your 36-digit BEA API key]') + beaParamVals('[your 36-digit BEA API key]', 'NIUnderlyingDetail', 'TableName') +``` + +*Patch 1.0.2 Note:* The RegionalIncome and RegionalProduct data sets replaced RegionalData at the end of May 2017. The "RegionalData" dataset has been discontinued, and the package was patched (v1.0.2) to update the beaSearch function accordingly. + + +# Instructions + +Thank you for using BEA's R library. The library is intended to make it easier to retrieve and work with BEA data. + +After you test the library, please send any feedback and, if possible, code that you have written to Developers@bea.gov (feedback and code can be provided together as an .Rmd file, or can be provided separately, in the formats of your preference). +## To Install and Load the stable, published version of the bea.R Library (recommended) + +```R + install.packages('bea.R') + library(bea.R) +``` + +## To Install and Load the development version of the bea.R Library (not recommended) + +**Please take the following steps:** + +1. Run the following line of code to install the 'httr' and 'devtools' packages: +```r + install.packages(c('devtools', 'httr')) +``` + +2. Load the packages listed in Step 1 using the 'library' function: +```r + library(httr) + library(devtools) +``` + +3. Install the bea.R library from the BEA GitHub repo: +```r + httr::set_config( config( ssl_verifypeer = 0L )) #zero L + devtools::install_github('us-bea/bea.R') +``` + + +4. Load bea.R using the library function. +```r + library(bea.R) +``` +You are now ready to use bea.R! + +## To Get Started +You must first [register for an API key](http://www.bea.gov/API/signup/index.cfm) from BEA by providing your name and email address. The key will be emailed to you. + +Once you have received your BEA API key, save it to a variable to make it easier to use later: + +```r +beaKey <- 'YOUR 36-DIGIT API KEY' +``` + +## To Use beaSearch and beaGet + +Currently, the bea.R library offers two main methods: beaSearch and beaGet. + +### beaSearch +This method allows you to search for BEA data by keyword. For example, to find all datasets in which the term "personal consumption" appears, use the following: + +```r +beaSearch('personal consumption', beaKey) +``` + +Please note that that beaSearch currently searches only national and regional data. + +You may also specify "asHtml = TRUE" to view in-browser: +```r +beaSearch('gross domestic', beaKey, asHtml = TRUE) +``` + +The contents of this function are automatically updated using a new metadata component of BEA's API; as such, we recommend that you use it with your API key, and the first use of this function requires that you use your key or it will be unable to extract the metadata. + +If you do not wish to automatically update the metadata (e.g., you have conducted a study using the search function), simply searching for the term without also passing your key to the function will do a search only using your locally stored version. + +However, *this approach is not advised.* If you would like to retain metadata for posterity, please copy it from the "bea.R/data" area of your .libPaths() directory to local storage elsewhere on your machine; this will help prevent accidental overwrite, and will not interfere with the "freshness" of your searches. + +### beaGet + +Once you have identified the TableID number and other information, you can use beaGet to access the data. The following code, for example, returns the NIPA table with 2015 data for TableID no. 66. + +```r +beaSpecs <- list( + 'UserID' = beaKey , + 'Method' = 'GetData', + 'datasetname' = 'NIPA', + 'TableName' = 'T20305', + 'Frequency' = 'Q', + 'Year' = 'X', + 'ResultFormat' = 'json' +); +beaPayload <- beaGet(beaSpecs); +``` + +To retrieve a limited selection of multiple years, list all the years you want to retrieve. For example, to retrieve data for 2011-2015, use "Year"="2011,2012,2013,2014,2015" + +The [API documentation](http://www.bea.gov/API/bea_web_service_api_user_guide.htm) includes information about the specific parameters required by beaGET. + +Setting asWide = FALSE gives results closest to the way they are actually returned by the API (every column is a variable, every row is an observation): +```r +beaLong <- beaGet(beaSpecs, asWide = FALSE) +``` + +To return in a format in which each column represents a series, set iTableStyle = FALSE. + +This returns columns named with a concatenation of the descriptive column values, whereas rows are populated with numeric DataValues for each TimePeriod, and has one column named "TimePeriod" filled with dates. +```r +beaStatTab <- beaGet(beaSpecs, iTableStyle = FALSE) +``` + +By default, asWide = TRUE and iTableStyle = TRUE, as this format is the most similar to our iTables; the "beaPayload" object in our first beaGet example at the beginning of this section is in the default format. + + +## To Use beaViz + +The bea.R library also includes an experimental method to create a visual dashboard. This method is still under development. Currently, it is designed to work with the standard R Console interface—not with other interfaces such as R Studio. (However, if you want to experiment with beaViz in R Studio, click on "Open in Browser" at the top of pop-up box after you execute the beaViz method. + +The beaViz method allows you to pass a variable generated from beaGet to create a dashboard. To use the "beaPayload" example given above, enter the following command: + +```r +beaViz(beaPayload) +``` +Please note that beaViz is currently only available for use with the NIPA and NIUnderlyingDetail datasets and the associated metadata. +BEA is open to any thoughts you may have about visually representing BEA data. + + +# About bea.R +bea.R is a library for use with BEA’s API and the R programming language, version 3.2.1 or higher. + +This library serves two core purposes: + +1. To Extract/Transform/Load data [beaGet] from the BEA API as R-friendly formats in the user's workspace. Transformation done by default in beaGet is analogous to the format used in [BEA's iTables](http://www.bea.gov/itable/index.cfm), but this can be modified using beaGet's optional parameters. + +2. To enable the search of descriptive metadata [beaSearch]. + +Other features of the library exist mainly as intermediate methods or are in early stages of development. + + +# Disclaimer +The United States Department of Commerce (DOC) GitHub project code is provided on an ‘as is’ basis and the user assumes responsibility for its use. DOC has relinquished control of the information and no longer has responsibility to protect the integrity, confidentiality, or availability of the information. Any claims against the Department of Commerce stemming from the use of its GitHub project will be governed by all applicable Federal law. Any reference to specific commercial products, processes, or services by service mark, trademark, manufacturer, or otherwise, does not constitute or imply their endorsement, recommendation or favoring by the Department of Commerce. The Department of Commerce seal and logo, or the seal and logo of a DOC bureau, shall not be used in any manner to imply endorsement of any commercial product or activity by DOC or the United States Government. + +Use of this library will result in data being stored on users' local machines. Specifically, local copies of BEA API metadata will be stored and automatically updated in the .libPaths() "/bea.R/data" directory in order to improve performance of beaSearch. diff --git a/beaR_Manual.pdf b/beaR_Manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f7eb9e172b1bdec23753e7c9cadcc143325c4415 GIT binary patch literal 121747 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