diff --git a/.Rbuildignore b/.Rbuildignore index b0cf256..9ea81bf 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -13,3 +13,4 @@ ^docs$ ^pkgdown$ ^\.github$ +^\.lintr$ diff --git a/.lintr b/.lintr new file mode 100644 index 0000000..62a0b8f --- /dev/null +++ b/.lintr @@ -0,0 +1,8 @@ +linters: linters_with_defaults() # see vignette("lintr") +encoding: "UTF-8" +exclusions: list( + "vignettes/articles/filter.Rmd", + "vignettes/articles/filter2.Rmd", + "vignettes/articles/downstream_analyses.Rmd", + "vignettes/articles/reference_semantics.Rmd" + ) diff --git a/R/filter_pactr-methods.R b/R/filter_pactr-methods.R index 8801c14..3f90409 100644 --- a/R/filter_pactr-methods.R +++ b/R/filter_pactr-methods.R @@ -7,8 +7,8 @@ filter_pactr$set( max_iso_shift, merge_peaks, merge_method = NULL) { - cli::cli_alert_info("Checking {nrow(self$mpactr_data$get_peak_table())} - peaks for mispicked peaks.") + l <- nrow(self$mpactr_data$get_peak_table()) + cli::cli_alert_info("Checking {l} peaks for mispicked peaks.") ion_filter_list <- list() cut_ions <- c() # list @@ -49,13 +49,14 @@ filter_pactr$set( self$logger[["check_mismatched_peaks"]] <- ion_filter_list if (isTRUE(merge_peaks)) { - cli::cli_alert_info("Argument merge_peaks is: {merge_peaks}. - Merging mispicked peaks with method {merge_method}.") + cli::cli_alert_info(c("Argument merge_peaks is: {merge_peaks}. ", + "Merging mispicked peaks with method ", + "{merge_method}.")) private$merge_ions(ion_filter_list, merge_method) } else { - cli::cli_alert_warning("Argument merge_peaks is: {merge_peaks}. - Mispicked peaks will not be merged.") + cli::cli_alert_warning(c("Argument merge_peaks is: {merge_peaks}. ", + "Mispicked peaks will not be merged.")) } self$logger$list_of_summaries$mispicked <- summary$new( @@ -111,8 +112,8 @@ filter_pactr$set("private", "get_merged_ions", function(ringwin, filter_pactr$set("private", "merge_ions", function(ion_filter_list, method) { if (is.null(method)) { - cli::cli_abort("No method has been supplied for merging peaks. - method must be one of: sum") + cli::cli_abort(c("No method has been supplied for merging peaks. ", + "{.var method} must be one of: sum")) } if (method == "sum") { @@ -222,21 +223,23 @@ filter_pactr$set( function(group, remove_ions = TRUE) { groups <- unique(self$mpactr_data$get_meta_data()$Biological_Group) if (isFALSE(group %in% groups)) { - cli::cli_abort("{.var group} {group} is not in {.var Biological_Group}. - Options are: {groups}") + + cli::cli_abort(c("{.var group} {group} is not in ", + "{.var Biological_Group}.", + "Options are: {groups}")) } - cli::cli_alert_info("Parsing {nrow(self$mpactr_data$get_peak_table())} - peaks based on the following sample group: {group}.") + l <- nrow(self$mpactr_data$get_peak_table()) + cli::cli_alert_info("Parsing {l} peaks based on the sample group: {group}.") if (isFALSE(remove_ions)) { - cli::cli_alert_warning("Argument remove_ions is {remove_ions}. - Peaks from {group} will not be removed.") + cli::cli_alert_warning(c("Argument remove_ions is {remove_ions}. ", + "Peaks from {group} will not be removed.")) return() } - cli::cli_alert_info("Argument remove_ions is: {remove_ions}. - Removing peaks from {group}.") + cli::cli_alert_info(c("Argument remove_ions is: {remove_ions}.", + "Removing peaks from {group}.")) ions <- self$logger[["group_filter-failing_list"]][[group]] self$mpactr_data$set_peak_table(self$mpactr_data$get_peak_table()[ @@ -269,14 +272,15 @@ filter_pactr$set( ## abort if there are no technical replicates. if (isFALSE(self$mpactr_data$isMultipleTechReps())) { - cli::cli_abort("There are no technical replicates in the dataset - provided. In order to run the replicability filter, - technical replicates are required.") + cli_abort(c("There are no technical replicates in the dataset provided. ", + "In order to run the replicability filter, technical ", + "replicates are required.")) } input_ions <- self$mpactr_data$get_peak_table()$Compound - cli::cli_alert_info("Parsing {length(input_ions)} peaks for - replicability across technical replicates.") + cli <- cli::cli_alert_info + n <- length(input_ions) + cli("Parsing {n} peaks for replicability across technical replicates.") cv <- data.table::melt(self$mpactr_data$get_peak_table(), id.vars = c("Compound", "mz", "rt", "kmd"), variable.name = diff --git a/R/filters.R b/R/filters.R index 81dd63a..887c51b 100644 --- a/R/filters.R +++ b/R/filters.R @@ -227,12 +227,14 @@ filter_group <- function(mpactr_object, #' #' data_filter <- filter_cv(data, #' cv_threshold = 0.01, -#' cv_param = "mean" +#' cv_param = "mean", +#' copy_object = TRUE #' ) #' #' data_filter <- filter_cv(data, #' cv_threshold = 0.01, -#' cv_param = "median" +#' cv_param = "median", +#' copy_object = TRUE #' ) #' filter_cv <- function(mpactr_object, @@ -259,7 +261,6 @@ filter_cv <- function(mpactr_object, return(mpactr_object) } - ########################### ### Insource ions filter ## ########################### diff --git a/R/mpactr-methods.R b/R/mpactr-methods.R index 4245915..3cbb6ff 100644 --- a/R/mpactr-methods.R +++ b/R/mpactr-methods.R @@ -6,6 +6,7 @@ mpactr$set("private", "initialize_data", function() { private$peak_table[, .SD, .SDcols = private$meta_data$Injection] ) > 0), ] private$set_kmd() + private$peak_table$Compound <- as.character(private$peak_table$Compound) }) mpactr$set("private", "set_kmd", function() { private$peak_table[, kmd := mz - floor(mz)] diff --git a/R/peak_table_formatter.R b/R/peak_table_formatter.R index 3c61e0a..d579138 100644 --- a/R/peak_table_formatter.R +++ b/R/peak_table_formatter.R @@ -29,7 +29,6 @@ format_by_type <- function(peak_table_path, } # default condition = NULL } - progenesis_formatter <- function(peak_table) { peak_table <- data.table(readr::read_csv(peak_table, skip = 2, @@ -64,10 +63,6 @@ mz_mine_formatter <- function(peak_table) { metaboscape_formatter <- function(peak_table, sample_names) { peak_table <- data.table(readr::read_csv(peak_table, show_col_types = FALSE)) peak_table_convert <- data.table::copy(peak_table) - adduct_data <- utils::read.csv(system.file("extdata/ion_masses", - "DefinedIons.csv", - package = "mpactR" - )) peak_table_convert <- with(peak_table_convert, peak_table_convert[ , ion := gsub( ".*\\[(.+)\\].*", "\\1", @@ -82,7 +77,10 @@ metaboscape_formatter <- function(peak_table, sample_names) { ][ charge_string == "3+", charge := 3 ][ - adduct_data, + utils::read.csv(system.file("extdata/ion_masses", + "DefinedIons.csv", + package = "mpactR" + )), on = .(ion = IONS) ][ , mz := (PEPMASS / charge) + MASS diff --git a/R/summary-class.R b/R/summary-class.R index b53a163..f0a668d 100644 --- a/R/summary-class.R +++ b/R/summary-class.R @@ -10,10 +10,12 @@ summary <- R6::R6Class("summary", private$passed_ions <- passed_ions }, summarize = function(x) { - cli::cli_alert_success("{length(private$failed_ions)} ions failed the - {private$filter} filter, - {length(private$passed_ions)} - ions remain.") + l <- length(private$failed_ions) + f <- private$filter + r <- length(private$passed_ions) + + cli::cli_alert_success(c("{l} ions failed the {f} filter, ", + "{r} ions remain.")) }, get_failed_ions = function() { return(private$failed_ions) diff --git a/man/filter_cv.Rd b/man/filter_cv.Rd index 9bedf7c..d8ba0aa 100644 --- a/man/filter_cv.Rd +++ b/man/filter_cv.Rd @@ -5,7 +5,6 @@ \title{Filter Non-reproducible ions} \usage{ filter_cv(mpactr_object, cv_threshold = NULL, cv_param, copy_object = FALSE) -filter_cv(mpactr_object, cv_threshold = NULL, cv_param, copy_object = FALSE) } \arguments{ \item{mpactr_object}{An \code{mpactr_object}. See \code{\link[=import_data]{import_data()}}.} @@ -51,12 +50,14 @@ data <- import_data(example("coculture_peak_table.csv"), data_filter <- filter_cv(data, cv_threshold = 0.01, - cv_param = "mean" + cv_param = "mean", + copy_object = TRUE ) data_filter <- filter_cv(data, cv_threshold = 0.01, - cv_param = "median" + cv_param = "median", + copy_object = TRUE ) } diff --git a/man/filter_mispicked_ions.Rd b/man/filter_mispicked_ions.Rd index 4cb12a8..82f3678 100644 --- a/man/filter_mispicked_ions.Rd +++ b/man/filter_mispicked_ions.Rd @@ -12,7 +12,6 @@ filter_mispicked_ions( max_iso_shift = 3, merge_peaks = TRUE, merge_method = "sum", - merge_method = "sum", copy_object = FALSE ) } diff --git a/tests/testthat/test-filter_pactr-class.R b/tests/testthat/test-filter_pactr-class.R index 7ec0d0a..8483b17 100644 --- a/tests/testthat/test-filter_pactr-class.R +++ b/tests/testthat/test-filter_pactr-class.R @@ -341,109 +341,201 @@ test_that("is_filter_run correctly assesses if a filter has been run", { expect_false(filter_class$is_filter_run(filter = "insource")) }) -test_that("get_log returns an error when an incorrect fitler argument is provided", { - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) - mpactr_class$setup() - filter_class <- filter_pactr$new(mpactr_class) - - expect_error(filter_class$get_log(filter = "cv"), "`filter` must be one of mpactR's") -}) +test_that("get_log returns an error when +an incorrect fitler argument is provided", { + directory <- "exttestdata" + peak_table_name <- "102623_peaktable_coculture_simple.csv" + meta_data_name <- "102623_metadata_correct.csv" + meta <- data.table(read_csv(test_path(directory, + meta_data_name), + show_col_types = FALSE)) + pt_list <- progenesis_formatter(test_path(directory, + peak_table_name)) + mpactr_class <- mpactr$new( + pt_list, + meta + ) + mpactr_class$setup() + filter_class <- filter_pactr$new(mpactr_class) + expect_error(filter_class$get_log(filter = "cv"), + "`filter` must be one of mpactR's") + }) -test_that("get_log returns an error when the fitler argument provided has not yet been run (e.g., not in the log)", { - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) - mpactr_class$setup() - filter_class <- filter_pactr$new(mpactr_class) - - expect_error(filter_class$get_log(filter = "mispicked"), "`filter` mispicked has not yet been applied to the data") -}) +test_that("get_log returns an error when the fitler + argument provided has not yet been run (e.g., not in the log)", { + directory <- "exttestdata" + peak_table_name <- "102623_peaktable_coculture_simple.csv" + meta_data_name <- "102623_metadata_correct.csv" + meta <- data.table(read_csv(test_path(directory, + meta_data_name), + show_col_types = FALSE)) + pt_list <- progenesis_formatter(test_path(directory, + peak_table_name)) + mpactr_class <- mpactr$new( + pt_list, + meta + ) + mpactr_class$setup() + filter_class <- filter_pactr$new(mpactr_class) + err_msg <- "`filter` mispicked has not yet been applied to the data" + expect_error(filter_class$get_log(filter = "mispicked"), err_msg) + }) test_that("get_log returns the correct fitler summary list", { - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) + directory <- "exttestdata" + peak_table_name <- "102623_peaktable_coculture_simple.csv" + meta_data_name <- "102623_metadata_correct.csv" + meta <- data.table(read_csv(test_path(directory, + meta_data_name), + show_col_types = FALSE)) + pt_list <- progenesis_formatter(test_path(directory, + peak_table_name)) + mpactr_class <- mpactr$new( + pt_list, + meta + ) mpactr_class$setup() filter_class <- filter_pactr$new(mpactr_class) - filter_class$check_mismatched_peaks(ringwin = 0.5, isowin = 0.01, trwin = 0.005, max_iso_shift = 3, merge_peaks = - TRUE, merge_method = "sum") - + filter_class$check_mismatched_peaks(ringwin = 0.5, + isowin = 0.01, + trwin = 0.005, + max_iso_shift = 3, + merge_peaks = TRUE, + merge_method = "sum") mispicked_summary <- filter_class$get_log(filter = "mispicked") - expect_type(mispicked_summary, "list") expect_equal(length(mispicked_summary), 2) expect_equal(length(mispicked_summary$passed_ions), 1233) }) -test_that("get_mispicked_ions returns error if check_mismatched_peaks has not been called", { - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) - mpactr_class$setup() - filter_class <- filter_pactr$new(mpactr_class) - - expect_error(filter_class$get_mispicked_ions(), "The mispicked filter has not yet been") -}) +test_that("get_mispicked_ions returns error if +check_mismatched_peaks has not been called", { + directory <- "exttestdata" + peak_table_name <- "102623_peaktable_coculture_simple.csv" + meta_data_name <- "102623_metadata_correct.csv" + meta <- data.table(read_csv(test_path(directory, + meta_data_name), + show_col_types = FALSE)) + pt_list <- progenesis_formatter(test_path(directory, + peak_table_name)) + mpactr_class <- mpactr$new( + pt_list, + meta + ) + mpactr_class$setup() + filter_class <- filter_pactr$new(mpactr_class) -test_that("get_mispicked_ions correctly returns the check_mismatched_peaks list", { - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) - mpactr_class$setup() - filter_class <- filter_pactr$new(mpactr_class) - filter_class$check_mismatched_peaks(ringwin = 0.5, isowin = 0.01, trwin = 0.005, max_iso_shift = 3, merge_peaks = - TRUE, merge_method = "sum") - - mispicked_groups <- filter_class$get_mispicked_ions() - - expect_equal(class(mispicked_groups), c("data.table", "data.frame")) - expect_equal(length(mispicked_groups), 2) - expect_equal(names(mispicked_groups), c("main_ion", "similar_ions")) -}) + expect_error(filter_class$get_mispicked_ions(), + "The mispicked filter has not yet been") + }) + +test_that("get_mispicked_ions correctly +returns the check_mismatched_peaks list", { + directory <- "exttestdata" + peak_table_name <- "102623_peaktable_coculture_simple.csv" + meta_data_name <- "102623_metadata_correct.csv" + meta <- data.table(read_csv(test_path(directory, + meta_data_name), + show_col_types = FALSE)) + pt_list <- progenesis_formatter(test_path(directory, + peak_table_name)) + mpactr_class <- mpactr$new( + pt_list, + meta + ) + mpactr_class$setup() + filter_class <- filter_pactr$new(mpactr_class) + filter_class$check_mismatched_peaks(ringwin = 0.5, + isowin = 0.01, + trwin = 0.005, + max_iso_shift = 3, + merge_peaks = TRUE, + merge_method = "sum") + + mispicked_groups <- filter_class$get_mispicked_ions() + + expect_equal(class(mispicked_groups), c("data.table", "data.frame")) + expect_equal(length(mispicked_groups), 2) + expect_equal(names(mispicked_groups), c("main_ion", "similar_ions")) + }) test_that("get_group_averages calculates a group table", { - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) + directory <- "exttestdata" + peak_table_name <- "102623_peaktable_coculture_simple.csv" + meta_data_name <- "102623_metadata_correct.csv" + meta <- data.table(read_csv(test_path(directory, + meta_data_name), + show_col_types = FALSE)) + pt_list <- progenesis_formatter(test_path(directory, + peak_table_name)) + mpactr_class <- mpactr$new( + pt_list, + meta + ) mpactr_class$setup() filter_class <- filter_pactr$new(mpactr_class) - - filter_class$check_mismatched_peaks(ringwin = 0.5, isowin = 0.01, trwin = 0.005, max_iso_shift = 3, merge_peaks = - TRUE, merge_method = "sum") - + filter_class$check_mismatched_peaks(ringwin = 0.5, + isowin = 0.01, + trwin = 0.005, + max_iso_shift = 3, + merge_peaks = TRUE, + merge_method = "sum") avgs <- filter_class$get_group_averages() expect_equal(class(avgs), c("data.table", "data.frame")) expect_equal(nrow(avgs), (1233 * 6)) - - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) + + mpactr_class <- mpactr$new( + pt_list, + meta + ) mpactr_class$setup() filter_class <- filter_pactr$new(mpactr_class) - - filter_class$check_mismatched_peaks(ringwin = 0.5, isowin = 0.01, trwin = 0.005, max_iso_shift = 3, merge_peaks = - TRUE, merge_method = "sum") + + filter_class$check_mismatched_peaks(ringwin = 0.5, + isowin = 0.01, + trwin = 0.005, + max_iso_shift = 3, + merge_peaks = TRUE, + merge_method = "sum") filter_class$filter_blank() filter_class$parse_ions_by_group(group_threshold = 0.01) filter_class$apply_group_filter("Blanks", remove_ions = TRUE) - + avgs <- filter_class$get_group_averages() expect_equal(class(avgs), c("data.table", "data.frame")) expect_equal(nrow(avgs), (484 * 6)) }) test_that("get_cv returns the cv filter has been applied", { - mpactr_class <- mpactr$new(test_path("exttestdata","102623_peaktable_coculture_simple.csv"), - test_path("exttestdata", "102623_metadata_correct.csv")) + directory <- "exttestdata" + peak_table_name <- "102623_peaktable_coculture_simple.csv" + meta_data_name <- "102623_metadata_correct.csv" + meta <- data.table(read_csv(test_path(directory, + meta_data_name), + show_col_types = FALSE)) + pt_list <- progenesis_formatter(test_path(directory, + peak_table_name)) + mpactr_class <- mpactr$new( + pt_list, + meta + ) mpactr_class$setup() filter_class <- filter_pactr$new(mpactr_class) - filter_class$check_mismatched_peaks(ringwin = 0.5, isowin = 0.01, trwin = 0.005, max_iso_shift = 3, merge_peaks = - TRUE, merge_method = "sum") + filter_class$check_mismatched_peaks(ringwin = 0.5, + isowin = 0.01, + trwin = 0.005, + max_iso_shift = 3, + merge_peaks = TRUE, + merge_method = "sum") filter_class$filter_blank() filter_class$parse_ions_by_group(group_threshold = 0.01) filter_class$apply_group_filter("Blanks", remove_ions = TRUE) - # filter_class$get_cv() expect_error(filter_class$get_cv(), "The cv filter has not yet") - + filter_class$cv_filter(cv_threshold = 0.2, cv_params = c("mean")) - + cv <- filter_class$get_cv() expect_equal(class(cv), c("data.table", "data.frame")) -}) \ No newline at end of file +}) diff --git a/tests/testthat/test-filter_pactr-methods.R b/tests/testthat/test-filter_pactr-methods.R index ee80dea..02148c2 100644 --- a/tests/testthat/test-filter_pactr-methods.R +++ b/tests/testthat/test-filter_pactr-methods.R @@ -29,7 +29,7 @@ properly with filter_pactr-class data", { "cut_ions.csv"), col_names = c("V1"), show_col_types = FALSE) - expected_cut_ions <- as.integer(expected_cut_ions$V1) + expected_cut_ions <- as.character(expected_cut_ions$V1) logger_index_name <- "check_mismatched_peaks" expect_equal(filter_class$logger[[logger_index_name]][["cut_ions"]], expected_cut_ions) @@ -105,10 +105,11 @@ test_that("blank filter works correctly", { grp_avg <- "102623_peaktable_coculture_simple_groupaverages.csv" test_path(directory, grp_avg) - error_prop <- read_csv(test_path(directory, grp_avg), + error_prop <- as.data.table(read_csv(test_path(directory, grp_avg), show_col_types = FALSE, skip = 1, col_names = c("Compound", "mz", "rt", "biologicalGroup", "average") - ) + ))[, Compound := as.character(Compound)] + setorder(error_prop, Compound) logger_index_name <- "group_filter-group_stats" expect_true(all(filter_class$logger[[logger_index_name]]$Biological_Group %in% error_prop$biologicalGroup)) @@ -164,17 +165,17 @@ test_that("parse_ions_by_group flags the correct ions", { expect_false(all(sapply(group_filter_list, is.null))) expect_true(all(group_filter_list$`ANG18 monoculture` - == as.character(ang_18$V1))) + %in% as.character(ang_18$V1))) expect_true(all(group_filter_list$`ANGDT monoculture` - == as.character(angdt$V1))) + %in% as.character(angdt$V1))) expect_true(all(group_filter_list$`Blanks` - == as.character(blanks$V1))) + %in% as.character(blanks$V1))) expect_true(all(group_filter_list$`Coculture` - == as.character(coculture$V1))) + %in% as.character(coculture$V1))) expect_true(all(group_filter_list$`JC28 monoculture` - == as.character(jc28$V1))) + %in% as.character(jc28$V1))) expect_true(all(group_filter_list$`JC28 monoculture` - == as.character(jc28$V1))) + %in% as.character(jc28$V1))) }) test_that("apply_group_filter removes the correct ions", { diff --git a/tests/testthat/test-filters.R b/tests/testthat/test-filters.R index f873d67..c3b2066 100644 --- a/tests/testthat/test-filters.R +++ b/tests/testthat/test-filters.R @@ -22,7 +22,7 @@ test_that("filter mismatch ions wrapper works "cut_ions.csv"), col_names = c("V1"), show_col_types = FALSE) - expected_cut_ions <- as.integer(expected_cut_ions$V1) + expected_cut_ions <- as.character(expected_cut_ions$V1) expect_equal(nrow(data_mpactr$mpactr_data$get_peak_table()), nrow((data_mpactr$mpactr_data$get_peak_table()))) diff --git a/vignettes/articles/downstream_analyses.Rmd b/vignettes/articles/downstream_analyses.Rmd index 683af2b..0d82f4f 100644 --- a/vignettes/articles/downstream_analyses.Rmd +++ b/vignettes/articles/downstream_analyses.Rmd @@ -87,6 +87,7 @@ We can join these two `data.table`s for plotting data set: ```{r} get_raw_data(data_filtered) %>% + mutate(Compound = as.character(Compound)) %>% select(Compound, mz, rt) %>% left_join(qc_summary(data_filtered), by = join_by("Compound" == "compounds") @@ -98,6 +99,7 @@ Now we can create a scatter plot to show the input features (m/z ~ retention tim ```{r} get_raw_data(data_filtered) %>% + mutate(Compound = as.character(Compound)) %>% select(Compound, mz, rt) %>% left_join(qc_summary(data_filtered), by = join_by("Compound" == "compounds") @@ -119,6 +121,7 @@ We can also make the plot interactive with the `plotly` package function `ggplot ```{r} feature_plot <- get_raw_data(data_filtered) %>% + mutate(Compound = as.character(Compound)) %>% select(Compound, mz, rt) %>% left_join(qc_summary(data_filtered), by = join_by("Compound" == "compounds") @@ -867,4 +870,3 @@ fc2 %>% axis.text = element_text(size = 15) ) ``` - diff --git a/vignettes/articles/filter.Rmd b/vignettes/articles/filter.Rmd index 6520f5c..f07c883 100644 --- a/vignettes/articles/filter.Rmd +++ b/vignettes/articles/filter.Rmd @@ -1,3 +1,4 @@ + --- title: "Filter" --- diff --git a/vignettes/articles/reference_semantics.Rmd b/vignettes/articles/reference_semantics.Rmd index 931d269..33714cd 100644 --- a/vignettes/articles/reference_semantics.Rmd +++ b/vignettes/articles/reference_semantics.Rmd @@ -1,3 +1,4 @@ + --- title: "Reference Semantics" ---