Changes in version 0.9.8.9005 - update roxygen2 version to "8.0.0". Changes in version 0.9.8.9004 - explicitly use 'mapping' argument in ggplot2::ggplot(). Changes in version 0.9.8.9003 - fix print.packageDistribution() for multiple packages. Changes in version 0.9.8.9002 - left-justify all README PNGs. Changes in version 0.9.8.9001 - fix reverse lookup and plot(cranDistribution()) R markdown chunks. Changes in version 0.9.8.9000 - fix resolveDate(type = "from") for future dates. Changes in version 0.9.8 (2026-03-15) Documentation - amend/update README. Fixes - fix multiPlot(r.version = TRUE, graphics = "base"). - fix ggplot2 xlab in plot.packageDistribution(). - fix y labels in plot.packageRank(). - fix output of packageHistory("R"). - fix cranDownloads("R", when). Function Changes - remove parallel code from packageLog(). - amend/add singlePlot(axis.package, axis.package.version). - add cranPlot(axis.package, axis.package.version). - add rPlot(axis.package, axis.package.version) - add rTotPlot(axis.package, axis.package.version). - add multiPlot(axis.package, axis.package.version). - add/set plot.cranDownloads(axis.package = NULL, axis.package.version = FALSE). - add multiPlot(package.version) for "base" and "ggplot2". - enable singlePlot(package.version = TRUE, graphics = "ggplot2"). - disable multiPlot(package.version) for "base" and "gglot2". - add gg_axis.annotation_polygon(axis.package, axis.package.version). - set geom_vline(colour = "black") in singlePlot(package.version = TRUE). - enable package.version for singlePlot(graphics = "ggplot2"). - archive populationPlot(). - integrate packageDistribution() into cranDistribution(). - change 'num.rank' to 'rank' in queryRank(). - fix inProgressEstimate(unit.observation = "month") for December. - add plot.packageLog() and print.packageLog(). - filter out packages with zero observations in plot.packageLog(). - replace 'packages' argument/object with 'package' in bioconductorDownloads(). - amend variable order in cranDownloads(). - set r.ver = "4.5" in cranPackageSize(). - add current UTC to logInfo(details = TRUE). - format logInfo(details = TRUE) output. - amend argument order and set localTime(time, date = Sys.Date()). - change 'time.unit' to 'unit.observation' in plot.packageLog(). Graphic Changes - change 'size' to geom_vline(linewidth) and set geom_label(size = 2.5). - add day of week to title in plot.packageLog(). - fix plot() in bioc_plot(). - fix ylabs in gg_bioc_plot(log.y = TRUE). Changes in version 0.9.7 (2025-10-15) Data - add packageRank::missing.dates: 8/25-8/26 and 8/29-9/02 in 2025. Function Changes - amend data type in fetchCranLog(): Character to Date. - archive addSmoother(), smoothWeekData(), addSinglePlotSmoother() and addMultiPlotSmoother(). - set cachem::cache_mem(max_size = 1.5 * 1024 * 1024^2) for memoise(). - remove computation of sequenceFilter() from packageLog(all.filters = TRUE). - add/set logInfo(check.days = 7) and amend 'cranlogs' check. - set ipFilter(multi.core = FALSE) in packageLog(). - add/set packageLog(version.filter = FALSE). - use pkgsearch::cran_package_history()$crandb_file_date for plot.cranDownloads(package.version). - use ggplot::labs(). - add date argument to versionFilter(). - amend/update filters in filteredDownloads(), packageCountry(), countryDistribution(), countryPackage() and ipPackage(); all.filters = TRUE only enables IP and small filters. - add packageHistory() version of versionFilter(). Graphic/Plot Changes - enable 'chatgpt' and 'r.version' arguments in plot.cranDownloads(graphics = "ggplot2") - add variable-sized polygons for packageRank::missing.dates. - add missingDatesPolygons() and gg_axis.annotation_polygon(). - add annualPlot() - set plot.cranDownloads(chatgpt = "line"). Fixes - fix plot.cranDownloads(weekend = TRUE). - add smoother subtitle to singlePlot(unit.observation != "day"). Changes in version 0.9.6 (2025-05-01) Function Changes - rename argument 'show.weekend' to 'weekend' in plot.cranDownloads(). - use fasttime::fastPOSIXct() in dateTime(). - replace as.POSIXlt() with as.POSIXct() in utc.R functions. - make rLog() internal. - replace "GMT" with "UTC". - re-enable/set packageLog(multi.core = FALSE). - set sequenceFilter(delta.time = 240). Graphic/Plot Changes (base graphics) - remove legend box and title for rPlot(unit.observation = "day"). - set legend(bg = NULL) in plot.cranDownloads() functions. - allow package.version = "line" and r.version = "line" in plot.cranDownloads(). - add/set plot.cranDownloads(chatgpt = FALSE) for graphics = "base". - allow chatgpt = "line" in plot.cranDownloads(). - add/set plot.cranDownloads(weekend = FALSE). Fixes - fix packageHistory() with multiple packages in singlePlot(). - compute date-time for packages before use of sequenceFilter(). - add exception in packageLog() for packages that don't survive ipFilter(). - fix rle() duplicates in removeSequences(). Changes in version 0.9.5 (2025-03-11) Function Changes - set annualDownloads() internal. - show day of week in print.cranDistribution(). - prioritize packageCRAN() over 'pkgsearch' results in packageHistory(). Fixes - fix rPlot() for log.y = TRUE and graphics = "ggplot2". - fix unmatched seq.start and seq.stop in removeSequences(). - fix plot.cranDownloads(unit.observation = "year"). Changes in version 0.9.4 (2024-11-13) Function Changes - match input vector order with output data frame in packageRank() and queryPackage(). - add/set queryPackage(check.package = TRUE). - move unique.packages to cranDistribution() list element and return via summary(). - add/set print.cranDistribution(top.n = 20). - remove parallel implementation of packageLog(). - amend stop() message in fixDate_2012(). - add 2012 exception to rev_fixDate_2012(). - add total downloads to print.cranDistribution() & summary.cranDistribution(). - use localTime() in logInfo(). Plot Changes - amend title and subtitle in plot.cranDistribution(). - amend x-axis in plot.packageDistribution(). - add day of week to plot.cranDistribution() title. Fixes - fix memoization in cranDistribution(). Changes in version 0.9.3 (2024-10-16) New Functionality - add cranDistribution() with plot, print and summary methods. - add queryCount(), queryPackage(), queryPercentile() and queryRank(). - refactor and use memoization and cranDistribution() in packageRank(). Function Changes - add/set packageRank(rank.ties = TRUE). - compute cores only for cranDistribution(ip.filter = TRUE). Plot Changes - use grDevices::devAskNewPage() with multiple packages in plot.packageRank(graphics = "base"). Fixes - fix transitory problem of multiple instances of a package on CRAN during a package update. Changes in version 0.9.2 (2024-08-01) Fixes - amend pro.mode = TRUE error message for cranDownloadsB() 'from' argument. - amend 'cranlogs' guess-timate in logInfo(). - fix multiple smoother subtitles: addMultiPlotSmoother and addRPlotSmoother(). Changes in version 0.9.1 (2024-05-22) New Functionality - add/set cranDownloads(pro.mode = FALSE). Fixes/Updates - update cranMirrors(). - fix cranDownloads(to = NULL). - fix dayOfMonth(end.of.month = TRUE). - fix plot(cranDownloads(pkg, when = "last-month"), unit.observation = "week", smooth = TRUE). - fix smoothWeekData() call in addSmoother() Plot Changes - use title case for axes labels. - contextualize smoother subtitle in plot.cranDownloads(graphics = "base"). Documentation - amend discussion of smoother parameters (loess as "default") in README. Changes in version 0.9.0 (2024-04-24) New Functionality - add rLog(). - add cranPackageSize(mac.ver = "arm"). Deprecated - remove tripletFilter() - redundant with amended sizeFilter(). Fixes/Updates - If available, multi.core = FALSE by default in all functions. - amend/correct aggregateData(unit.observation = "week"). - fix computeFileSizeB() for multiple size units. - update cranMirrors(). - update/set cranPackageSize(r.ver = "4.3"). - fix argument error in packageArchive() for sizeFilter(). - fix packageDistribution() for multiple packages. - add timeout fix to packages_on_CRAN(), packageArchive() and packageCRAN(). - fix/ensure exact package name matching in packageCRAN(). - return latest release in package_info() for packageCRAN() (n.b. pkg updates). - fix packageCRAN(size) and packageArchive(size). - fix packageHistory("R"). - match point types in plot.cranDownloads(graphics = "ggplot2", unit.observation = "week"). - modify removeSequences() for high volume packages. - fix typo/error in sequenceFilter(). Function Changes - use previous day if today not available in cranDownloads(). - remove non-user facing functions from NAMESPACE. - update 'ggplot2' syntax in cranDownloads() plot functions, ggPlot(), gg_bioc_plot(), plot.annualDownloads(), plotDownloadsCountry(), plot.packageDistribution(), plotTopCountryCodes(), plot.weeklyDownloads() and plot.packageVersionPercent(). - check internet connection in bioconductorDownloads() and bioconductorRank(). - change "warn.msg" to "print.message" in checkPackage(). - remove dev.mode argument from checkPackage(). - add/set plot.countryDistribution(N = 10) for top N country domains. - match cranlogs::cran_downloads() behavior with duplicate packages in cranDownloads() and packageHistory(). - add delta count and inflation unit in filteredDownloads(). - replace ip_filter() with greedyIP() in ipFilter(). - use only counts in greedyIP() in ipFilter(). - compute run length encoding and candidate.data in ipFilter(campaigns = TRUE). - change/set ipCount(sort.count = TRUE). - use "file.url.date" in ipCount() and ipDownloads(). - disable parallel code for ipFilter(campaigns = TRUE). - include local time with logInfo(details = TRUE). - check last 3 rather than last 7 logs for logInfo(details = TRUE). - name list elements in packageHistory(). - set packageHistory(check.package = TRUE). - use "crandb_file_date" for dates in packageHistory(). - use packageCRAN() instead of mpackages_on_CRAN() in packageHistory(). - return empty data frame for no CRAN, no Archive in packageHistory0(). - make packageHistory0(), packageCRAN() and packageArchive() standalone and private. - change plot.annualDownloads(f = 1/4). - add/set plot.annualDownloads(line.col = "gray") and fix outliers. - replace log_count argument with log.y in plot.bioconductorRank and plot.packageRank(). - rename/set sequenceFilter(delta.time = 10). - add pre-flight checks to sequenceFilter() and smallFilter(). - replace identifySequences() with removeSequences() in sequenceFilter(). - set packageHistory(check.package = FALSE) in sequenceFilter(). - filter out undersized downloads of past versions in sizeFilter(). - add exception for "R" in validatePackage() and validatePackage0(). - remove tripletFilter() code from utilities.R functions. Documentation - add annualDownloads() example to README. - add personal default plots to README. Changes in version 0.8.3 (2023-11-09) Fixes - use packageLifeFilter() only when cranDownloads(check.package = TRUE). - remove fix for doubled cranlogs::cran_downloads(packages %in% c(NULL, pkg)) counts; underlying 'cranlogs' issue #68 fixed. Documentation - amend/update README. Changes - clean DESCRIPTION Imports. Changes in version 0.8.2 (2023-10-10) Fixes - fix "doubled" cranlogs::cran_downloads(packages = "R") R application download counts in cranDownloads() from 2023-09-12 to 2023-10-02. - fix doubled cranlogs::cran_downloads(packages %in% c(NULL, pkg)) download counts in cranDownloads() from 2023-09-19 to 2023-10-01. - add timeout fix to checkPackage(). Function Changes - set packageHistory(check.package = FALSE) - remove "Today's results not available" message from cranDownloads(). Documentation - amend Sunday/Wednesday R Windows application download spikes README note. - add discussion of "doubled" counts in cranlogs::cran_downloads() to README. Changes in version 0.8.1 (2023-03-29) New Functionality - add packages_on_CRAN(), packages_in_Archive(), packages_observed_in_logs() and packages_partitioned(). - add extractArchiveDate(). - add/set packages_partitioned(observed.downloads = FALSE). Fixes - amend packageLog() for packages that get filtered to zero. - amend/fix sizeFilter() for archive-only packages. - fix pkgsearch::cran_package_history() "try-error" in packageHistory(). - fix ylim in plot.cranDownloads(graphics = "base", unit.observation = "week"). - fix logInfo() when 'cranlogs' not available. - set filteredDownloads(all.filters = FALSE) if any individual filter is TRUE. - add temporary timeout = 600L to packages_partitioned(). - set options(timeout = 600L) in cranPackageSize(). - sort list element names in packageHistory(). Function Changes - set packageLog(check.package = FALSE) in filteredDownloads(). - memoize packages_partitioned(). - add/set dev.mode = FALSE for ipFilter() in countryDistribution(), countryPackage() and ipPackage(). - add memoized archivePackages(). - refactor checkPackage(). - change result data type and content of validatePackage(). - add 'cranlogs' check to cranDownloads(). - add/use memoized packageHistory0() in packageHistory(). - allow mix of CRAN and Archive-only packages (and R) in packageHistory(). - add memoized packages_on_CRAN(). - add CRAN check to packageHistory(). Documentation - note Wednesday R Windows application download spikes in README. Changes in version 0.8.0 (2023-02-14) Fixes - add lookup for exceptions in cranMirrors(). - fix plot.cranDownloads(graphics = "base", multi.plot = TRUE, smooth = TRUE). - fix sequenceFilter() for packages not in CRAN Archive. Function Change - set annualDownloads(log.y = FALSE). - add/set annualDownloads(sep.y = FALSE). - add/set cranMirrors(description = FALSE). - change logInfo(list.available = FALSE) to logInfo(show.available = FALSE). - set class of packageHistory()$Date to "Date". - archive/deprecate packageMRAN() and related functionality. - set loess as default smoother in plot.cranDownloads() Documentation - add discussion about R Windows Sunday downloads to README. Changes in version 0.7.2 (2022-10-11) Function Change - add exception to logInfo() when 'cranlogs' is down. Changes in version 0.7.1 (2022-09-13) Fixes - fix/clean rPlot(r.version = TRUE). - fix plot(cranDownloads("R"), r.total = TRUE). Function Change - logInfo() checks for last available log. Changes in version 0.7.0 (2022-08-05) New Features - add plot.cranDownloads(unit.observation = “week”). - discuss ‘from =’ and ‘to =’ cranDownloads() shortcuts in README. Fixes - enable ipPackage(). - fix cranDownloads(“R”, to = ). - fix output for packageHistory(“R”). Function Changes - add logInfo() and deprecate logPostInfo(). - change ‘log.count’ to ‘log.y’ in plot.bioconductorDownloads() and plot.cranDownloads(). - limit available unit of observations: - with when = “last-week” only unit.observation = “day” available. - with when = “last-month” AND graphics = “ggplot2”, unit.observation = “month” not available - recompute cumulative count with plot.cranDownloads(unit.observation = “week”) to include backdate data. - return cores = 1L on Windows with multiCore(); parallelization on Windows not currently available. - use ‘ISOcodes’ in cranMirrors(). Graphical Changes - amend plot.cranDownloads(graphics = “ggplot2”) legends. - plot.cranDownloads(unit.observation = “month”) date plotted on first rather than last day of month. - use observed date for first week observed data in plot.cranDownloads() - set 0s to 1s to avoid NAs when plot.cranDownloads(log.y = TRUE). Graphical Fixes - amend xy labels for “count” or “cumulative” in plot.cranDownloads(). New Auxiliary/Helper Functions - add fetchRLog(). - add getCorrectLogs() and rstudio.logs list object. - add rev_fixDate_2012(). - add/set cranDownloads(fix.cranlogs = TRUE). - add/use fixCranlogs(). - add/set logDate(fix.date = TRUE). - add/set resolveDate(fix.date = FALSE). Changes in version 0.6.0 (2022-03-16) Fixes - amend fetchCranLog() message. - fix tripletFilter(). - add exception and warning for packages with zero downloads (not in log) for packageLog() and packageRank(). - fix variable names in packageCRAN() and packageArchive(). - fix y-axis typo and labels in cranPlot(). - set data.frame(row.names = NULL) in packageHistory(). - amend/update country code top level domains in cranMirrors(). Function Changes - add packageHistory(“R”). - allow multiple packages (vector) in packageHistory() and packageMRAN(). - restrict parLapply() to dev.mode = TRUE. Graphical Changes - amend graphical elements for estimate and in-progress download counts in plot.cranDownloads(). Changes in version 0.5.0 (2021-09-15) Fixes - increase fetchCranLog() timeout to 600. Function Changes - visualize different units of observation: “day” (default), “month”, and “year” with plot.cranDownloads(unit.observation = “day”). - add in-progress plots with nominal and estimated totals for aggregate units of observation. Changes in version 0.4.2 (2021-05-03) Fixes - fix plot.cranDownloads(package.version = TRUE) for multiple packages. - fix multiple version in sizeFilter() with packageHistory(). - fix and enable sizeFilter(). Function Changes - add/set filteredDownloads(multi.core = TRUE). - amend warning message with timeMsg() in logDate(). Changes in version 0.4.1 (2021-04-06) Function Changes - logDate(): check download log URL before computing available_log() for logs available before 17:00 UTC. - change facet_wrap(~ package, ncol = 2) to facet_wrap(~ package, nrow = 2). - use logDate() in logPostInfo(). - enable log.count argument for plot.cranDownloads(r.total = TRUE and FALSE). - enable multi.plot argument for rPlot(graphics = “ggplot2”). - add geom_smooth(span = 3/4). Fixes - sizeFilter() and cranPackageSize(): fix multiple versions with package updates. New Research Functions - annualDownloads() and weeklyDownloads(). Changes in version 0.4.0 (2021-03-01) New Features and Functionality - filters shortcut via all.filters = TRUE argument. - temporarily set options(timeout = 300L) for fetchCranLog() for R 4.0.3. - time zone support via logDate(). Data Changes - add pkg.history. - add arch.pkgs.jul, arch.pkgs.oct, cran.pkgs.jul and cran.pkgs.oct samples. - add october.downloads and july.downloads. - add top.n.jul2020. - rename blog.datatop.n to blog.datatop.n.oct2019. - use serialization format = 3 for blog.data object. Fixes - amend majority rule syntax in timeFix(). - fix Mac directory changes in packageMRAN(). - fix typo in plot.countryDistribution(). - fix resolveDate() by first as.character() all dates. - fix scrapeData() using strsplit(fixed = TRUE). - pass ‘f’ argument, lowess() smoother span value, to rPlot(). Function Changes - add add.legend argument to plot.cranFilterCounts(). - add cumsum to cranDownloads() for cumulative counts and growth curves. - add dataset argument to plotTopCountryCodes(). - add packageLog(clean.out = FALSE). - add population.seed argument to populationPlot(). - add second.place argument to plotTopCountryCodes(). - add subtitle argument to inflationPlot2(). - add wed (Wednesday) argument to inflationPlot2(). - change default orientation of ggplot2 facets in plot.cranDownloads(). - note packageArchive() fix for ‘testthat’ filename typo/duplicate. - set geom_point(size = 1.5) for single day, multiple package plot in singlePlot() - use alpha transparency in plot.packageRank() labels. - use “crandb_file_date” instead of “Date/Publication” in packageHistory(). - use sugrrants::facet_calendar() with packageVersionPercent(), plotTopCountryCodes(), and plotDownloadsCountry New Functions - countryDistribution() - cranMirrors() - cranPackages() - cranPackageSize() - downloadsCountry() - filteredDownloads() - ipCount() - ipDownloads() - ipPackage() - packageMRAN() - topCountryCodes() New Filter Functions - ipFilter() - sequenceFilter() - sizeFilter() - smallFilter() - tripletFilter() New Helper Functions - checkPackage() - cleanLog() - dateTime() - packageSample() - validatePackage() New Time/Time Zone Functions - currentTime() - utc() - utc0() - localTime() - logDate() - logPostInfo() New/Amended Blog specific Functions - countsRanks() - cranPlot() - inflationPlot2() - monthlyLog() - packageVersionPercent() - versionPlot() Changes in version 0.3.5 (2020-05-08) Blog specific functions - countsRanks() - inflationPlot() Data Changes - add blog.data Fixes - fixDate_2012() for packageLog() Correct mislabeled filenames for 2012 logs RStudio’s CRAN download logs at http://cran-logs.rstudio.com/. - fix “geom_smooth() using formula ‘y ~ x’” warning for ‘ggplot2’ v3.3.0. Function Changes - enable arbitrary “to” argument without “from” in cranDownloads() e.g., cranDownloads(from = NULL, to = “2020-01-01”). - add/amend plot.cranDownloads(package.version = FALSE, r.version = FALSE). - set plot.cranDownloads(points = “auto”) for <= 45 days. - “spell check” package names via “check.package” argument cranDownloads(), packageDistribution(), packageRank() - deprecate packageRankTime() -> plot.cranDownloads(population.plot = TRUE) - use packageLog(packages = NULL) to view a day’s log. - enable negative filter values in packageLog() and packageRank(). New Functions - archivePackages() - countryPackage() - packageArchive() - packageCountry() - packageDistribution() - packageHistory() uses ‘pkgsearch’; packageHistory0() scrapes CRAN. - packageInfo() - validatePackage() uses ‘pkgsearch’; validatePackage0() scrapes CRAN. Changes in version 0.3.0 (2019-10-21) - add cranDownloads(). - enable “yyyy-mm-dd”, “yyyy-mm” or “yyyy” in cranDownloads(from, to). - add plot.cran_downloads(points = “auto”). - add plot.cran_downloads(r.version). - deprecate cran_downloads2(). - add dayOfMonth(). - add bioconductorDownloads(). - add bioconductorRank(). Changes in version 0.2.0 (2019-07-11) - implement minor parallelization for packageRankTime(). - base graphics for single package/date; ggplot2 for multiple packages/dates. - fix smooth argument in plot.package_rank_time(graphics_pkg = “base”). Changes in version 0.1.0 (2019-05-16) - first CRAN release.