diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index bf5284cf..2023aed5 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -52,3 +52,5 @@ jobs: - uses: r-lib/actions/check-r-package@v2 with: upload-snapshots: true + build_args: 'c("--no-manual", "--no-build-vignettes")' + error_on: '"error"' diff --git a/Makefile b/Makefile index 686a47ef..642d69ce 100644 --- a/Makefile +++ b/Makefile @@ -114,15 +114,15 @@ doc-update: R/*.R misc/dev/dev.cpp pkg-build:: ../macpan2_$(VERSION).tar.gz ../macpan2_$(VERSION).tar.gz: DESCRIPTION man/*.Rd R/*.R src/*.cpp tests/testthat/test-*.R tests/testthat.R inst/starter_models/**/*.csv inst/starter_models/**/*.json - R CMD build --no-build-vignettes . + cd .. && R CMD build --no-build-vignettes macpan2 pkg-check: ../macpan2_$(VERSION).tar.gz - R CMD check ../macpan2_$(VERSION).tar.gz + cd .. && R CMD check macpan2_$(VERSION).tar.gz pkg-install: ../macpan2_$(VERSION).tar.gz - R CMD INSTALL --no-multiarch --install-tests ../macpan2_$(VERSION).tar.gz + cd .. && R CMD INSTALL --no-multiarch --install-tests macpan2_$(VERSION).tar.gz compile-dev: misc/dev/dev.cpp diff --git a/R/formula_data.R b/R/formula_data.R index 9bcb50be..b3000c49 100644 --- a/R/formula_data.R +++ b/R/formula_data.R @@ -1,8 +1,8 @@ -FormulaData = function(frame, reference_index_list) { +FormulaData = function(frame, reference_index_list, labelling_names_list) { self = Base() self$frame = frame self$reference_index_list = reference_index_list - + self$labelling_names_list = labelling_names_list return_object(self, "FormulaData") } diff --git a/R/link.R b/R/link.R index 858db46b..e25e4437 100644 --- a/R/link.R +++ b/R/link.R @@ -18,14 +18,15 @@ #' ``` #' #' @export -Link = function(frame, column_map, reference_index_list) { +Link = function(frame, column_map, reference_index_list, labelling_names_list) { self = Base() self$frame = frame self$column_map = column_map self$reference_index_list = reference_index_list - self$labelling_names_list = function() { - lapply(self$reference_index_list, getElement, "labelling_names") - } + self$labelling_names_list = labelling_names_list + # function() { + # lapply(self$reference_index_list, getElement, "labelling_names") + # } self$table_names = function() names(self$column_map) self$labels_for = list() self$labels_frame = function() { @@ -65,6 +66,7 @@ Link = function(frame, column_map, reference_index_list) { Link(self$frame[i, , drop = FALSE] , column_map = self$column_map , reference_index_list = self$reference_index_list + , labelling_names_list = self$labelling_names_list ) } self$partition = self$partition_for[[1L]]() ## hack! should probably have a method and then change the partition field in Index to a method as well @@ -102,10 +104,10 @@ FrameGetter = function(link, dimension_name) { self$get_partition = function() self$get_frame() |> Partition() self$get_index = function() Index( self$get_partition(), - self$link$labelling_names_list()[[self$dimension_name]] + self$link$labelling_names_list[[self$dimension_name]] ) self$get_labels = function() { - i = self$link$labelling_names_list()[[self$dimension_name]] + i = self$link$labelling_names_list[[self$dimension_name]] f = self$get_frame()[, i, drop = FALSE] l = as.list(f) paste_args = c(l, sep = ".") @@ -125,7 +127,7 @@ initial_reference_index_list = function(index, dimension_name) { setNames(list(index), dimension_name) } -## TODO XXX + initial_labelling_names_list = function(labelling_names, dimension_name) { setNames( list(labelling_names), @@ -205,6 +207,7 @@ merge_util = function(x, y, by.x, by.y) { z_column_map = c(x_cmap, y_cmap) z_reference_index_list = c(x$reference_index_list, y$reference_index_list) + z_lab_names_list = c(x$labelling_names_list, y$labelling_names_list) ## ---- ## wrap up the result with provenance-preserving column map @@ -212,7 +215,8 @@ merge_util = function(x, y, by.x, by.y) { Link( z, z_column_map, - z_reference_index_list + z_reference_index_list, + z_lab_names_list ) } @@ -230,10 +234,11 @@ filter_by_list = function(x_orig, y_orig, by_list) { } #' @export -init_merge = function(frame, dimension_name, reference_index) { +init_merge = function(frame, dimension_name, reference_index, labelling_names) { Link(frame , initial_column_map(names(frame), dimension_name) , initial_reference_index_list(reference_index, dimension_name) + , initial_labelling_names_list(labelling_names, dimension_name) ) } @@ -288,7 +293,7 @@ explicit_provenance = function(x, col_nm) { ) f = x$frame - l = x$labelling_names_list() + l = x$labelling_names_list orig_col = f[[col_nm]] for (tab_nm in tabs_to_fix) { @@ -297,6 +302,7 @@ explicit_provenance = function(x, col_nm) { m[[tab_nm]][[col_nm]] = new_col_nm } f[[col_nm]] = NULL + ## TODO: update with four-arg form of Link Link(f, m, l) } @@ -370,7 +376,7 @@ print.summary.Link = function(x, ...) { names.Link = function(x) names(x$frame) #' @export -labelling_names.Link = function(x) x$labelling_names_list() +labelling_names.Link = function(x) x$labelling_names_list link_format_picker = function(x diff --git a/R/mp.R b/R/mp.R index 7bdcbd7d..ceda672f 100644 --- a/R/mp.R +++ b/R/mp.R @@ -144,7 +144,7 @@ mp_union.Link = function(...) { ) |> stop() } ## TODO: should really be checking for reference_index_list - labelling_names_list = method_apply(l, "labelling_names_list") |> unique() + labelling_names_list = lapply(l, getElement, "labelling_names_list") |> unique() if (length(labelling_names_list) != 1L) { msg_colon( msg( @@ -157,7 +157,7 @@ mp_union.Link = function(...) { ) |> stop() } frame = mp_rbind(...) - FormulaData(frame, l[[1L]]$reference_index_list) + FormulaData(frame, l[[1L]]$reference_index_list, l[[1L]]$labelling_names_list) } #' @export @@ -194,7 +194,7 @@ mp_choose = function(x, subset_name, ...) { p = p$filter(vals, .wrt = cc) } } - init_merge(p$frame(), subset_name, x$reference_index()) + init_merge(p$frame(), subset_name, x$reference_index(), x$labelling_names) } #' @export @@ -205,7 +205,7 @@ mp_choose_out = function(x, subset_name, ...) { vals = l[[cc]] p = p$filter_out(vals, .wrt = cc) } - init_merge(p$frame(), subset_name, x$labelling_names) + init_merge(p$frame(), subset_name, x$reference_index(), x$labelling_names) } #' @export @@ -375,10 +375,10 @@ mp_rename = function(x, ...) { } #' @export -mp_select = function(basis, grouping_dimension) { - frame = basis$partition$select(to_names(grouping_dimension))$frame() - nms = names(frame)[names(frame) %in% basis$labelling_names] - frame |> Index(labelling_names = nms, basis$partition) +mp_select = function(index, grouping_dimension) { + frame = index$partition$select(to_names(grouping_dimension))$frame() + nms = names(frame)[names(frame) %in% index$labelling_names] + frame |> Index(labelling_names = nms, index) } #' @export diff --git a/man/Link.Rd b/man/Link.Rd index 4e12c608..aba1a54d 100644 --- a/man/Link.Rd +++ b/man/Link.Rd @@ -4,7 +4,7 @@ \alias{Link} \title{Link} \usage{ -Link(frame, column_map, reference_index_list) +Link(frame, column_map, reference_index_list, labelling_names_list) } \description{ Make an object to describe links between the entities in an diff --git a/misc/experiments/refactorcpp.R b/misc/experiments/refactorcpp.R index d984780b..78675e46 100644 --- a/misc/experiments/refactorcpp.R +++ b/misc/experiments/refactorcpp.R @@ -43,15 +43,19 @@ trans_rates = (trans_rates_sir |> mp_cartesian(contact) ) -mp_join( +xx = mp_join( alive = mp_subset(state, Vital = "alive"), N = mp_select(state, "Loc.Age"), alive.N = "Loc.Age" ) -mp_choose(mp_select(state, "Loc.Age"), "N") +mp_labels +xx$reference_index_list$N$labelling_names +yy = mp_formula_data(xx) +yy$reference_index_list + yy = Vector(state) yy$numbers() yy$set_numbers(Loc = c(cal = 1000, ham = 2000, que = 3000), Epi = "S") @@ -118,8 +122,8 @@ trans_decomp = mp_decompose( , infectivity = "Loc" , susceptibility = "AgeInfection" ) -trans_decomp$linked_indices +trans_decomp trans_decomp$formula trans_decomp$input_formula macpan2:::update_formula(g ~ y * x * z, g ~ friend) diff --git a/src/macpan2.cpp b/src/macpan2.cpp index dfa5dce1..e0951f41 100644 --- a/src/macpan2.cpp +++ b/src/macpan2.cpp @@ -470,7 +470,6 @@ class ArgList { int j = m.rows(); if (j == 1) { std::vector v = get_as_int_vec(i); - // std::cout << "HI" << v[0] << std::endl; return v[0]; } return j;