+
-
+
The crosses appear because grim_map_seq()
creates
sequences around both x
and n
. Restrict this
process to any one of these with the var
argument:
-
+
-
-
@@ -670,7 +588,7 @@
Semi-automated solutionaudit_total_n() for summarizing the results. It will find
two further plausible scenarios in which both means are consistent; more
on that below.
-
+
df <- tibble :: tibble ( x1 = "4.71" , x2 = "5.3" , n = 40 )
# Detailed results:
@@ -752,7 +670,7 @@
takes the arguments x
,
n
, items
, and percent
as in
grim()
and grim_map()
:
-
-
scrutiny (development version)
+
scrutiny 0.4.0
This version brings major performance improvements. Furthermore:
-
Bugfixes
+
Bugfixes
Fixed a bug in audit_seq()
: If the dispersion
argument in the preceding call to a function like grim_map_seq()
was specified as something other than a linearly increasing sequence, the "diff_*"
columns in the data frames returned by audit_seq()
may have contained incorrect values.
Similarly, audit_seq()
and reverse_map_seq()
used to reconstruct the reported values incorrectly if the dispersion
default was overridden as described above. At least for now, the issue is handled by throwing an error if these functions operate on data frames that are the result of specifying dispersion
as something other than a linearly increasing sequence.
Fixed a bug that incorrectly threw an error in grim_map_seq()
, other functions made by function_map_seq()
, as well as seq_disperse()
and seq_disperse_df()
if an input value was so close to out_min
or out_max
that the output sequence would be shorter than implied by dispersion
/ .dispersion
, and if track_var_change
/ .track_var_change
(see below) was TRUE
. Again, note that the bug only occurred if an error was thrown.
-
New features
+
New features
A new vignette lists the options for specifying the rounding
argument that many scrutiny functions have: vignette("rounding-options")
.
+Another new vignette shows the minimal steps to implement a consistency test using scrutiny: vignette("consistency-tests-simple")
.
The output of grim_map_seq()
, grimmer_map_seq()
, debit_map_seq()
and any other function made by function_map_seq()
now has a diff_var
column that tracks the difference between the dispersed variable (see the var
column) and the reported value. Following the diff_*
columns in the output of audit_seq()
, this is the number of dispersion steps, not the actual numeric difference.
The same diff_*
columns are now integer, not double.
function_map()
, function_map_seq()
, and function_map_total_n()
have a new .name_key_result
argument that controls the name of the key result column in the output of the factory-made function. This is "consistency"
by default, but other names will fit better for other kinds of tests. (The results of these tests must still be logical values.)
-
Minor changes
+
Minor changes
In duplicate_count()
, the count
column in the output tibble was renamed to frequency
. This makes for a more streamlined frequency table and removes an ambiguity with duplicate_count_colpair()
, where the count
output column means something different.
In seq_disperse()
and seq_disperse_df()
, the track_var_change
/ .track_var_change
argument was renamed to track_diff_var
/ .track_diff_var
. The arguments with the old names are still present for now but will be removed in a future version. Also, the unit of these values is now dispersion steps, for consistency with grim_map_seq()
etc. as well as audit_seq()
.
grim_total()
, grim_ratio()
, and grim_ratio_upper()
now require x
to have length 1.
+The docs now link to functions when opened in RStudio, not just on the website.
+Accordingly, the output of write_doc_factory_map_conventions()
now renders links. The function also has a new scrutiny_prefix
argument for use in another package.
+The “Infrastructure” article was renamed to “Developer tools”; vignette("devtools")
.
Some dependencies that used to be suggested are now imported.
diff --git a/pkgdown.yml b/pkgdown.yml
index 47263ef..74fe77e 100644
--- a/pkgdown.yml
+++ b/pkgdown.yml
@@ -5,15 +5,15 @@ articles:
consistency-tests-in-depth: consistency-tests-in-depth.html
consistency-tests-simple: consistency-tests-simple.html
debit: debit.html
+ devtools: devtools.html
duplicates: duplicates.html
grim: grim.html
grimmer: grimmer.html
- infrastructure: infrastructure.html
related: related.html
rounding-in-depth: rounding-in-depth.html
rounding-options: rounding-options.html
wrangling: wrangling.html
-last_built: 2024-02-23T22:34Z
+last_built: 2024-02-23T23:38Z
urls:
reference: https://lhdjung.github.io/scrutiny/reference
article: https://lhdjung.github.io/scrutiny/articles
diff --git a/reference/audit-special.html b/reference/audit-special.html
index 41b63c9..e72ac60 100644
--- a/reference/audit-special.html
+++ b/reference/audit-special.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/audit.html b/reference/audit.html
index d40385a..d2bf701 100644
--- a/reference/audit.html
+++ b/reference/audit.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/audit_cols_minimal.html b/reference/audit_cols_minimal.html
index c931427..bd48a53 100644
--- a/reference/audit_cols_minimal.html
+++ b/reference/audit_cols_minimal.html
@@ -30,7 +30,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -56,10 +56,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/audit_list.html b/reference/audit_list.html
index b0d8635..c8288a1 100644
--- a/reference/audit_list.html
+++ b/reference/audit_list.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/check_audit_special.html b/reference/check_audit_special.html
index 4b57989..5c5d5c2 100644
--- a/reference/check_audit_special.html
+++ b/reference/check_audit_special.html
@@ -24,7 +24,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -50,10 +50,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/check_mapper_input_colnames.html b/reference/check_mapper_input_colnames.html
index 652bdac..51d3eca 100644
--- a/reference/check_mapper_input_colnames.html
+++ b/reference/check_mapper_input_colnames.html
@@ -26,7 +26,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -52,10 +52,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/data-frame-predicates.html b/reference/data-frame-predicates.html
index 9565c58..069755a 100644
--- a/reference/data-frame-predicates.html
+++ b/reference/data-frame-predicates.html
@@ -40,7 +40,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -66,10 +66,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/debit.html b/reference/debit.html
index 64f5799..cd0674c 100644
--- a/reference/debit.html
+++ b/reference/debit.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/debit_map.html b/reference/debit_map.html
index f88eede..94a9ee0 100644
--- a/reference/debit_map.html
+++ b/reference/debit_map.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/debit_map_seq.html b/reference/debit_map_seq.html
index 76a6337..ac6a907 100644
--- a/reference/debit_map_seq.html
+++ b/reference/debit_map_seq.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/debit_map_total_n.html b/reference/debit_map_total_n.html
index 90e4209..5b51c51 100644
--- a/reference/debit_map_total_n.html
+++ b/reference/debit_map_total_n.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/debit_plot.html b/reference/debit_plot.html
index 8fd3a77..8ce44ae 100644
--- a/reference/debit_plot.html
+++ b/reference/debit_plot.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/decimal_places.html b/reference/decimal_places.html
index 5593a81..0ef4cfa 100644
--- a/reference/decimal_places.html
+++ b/reference/decimal_places.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/decimal_places_df.html b/reference/decimal_places_df.html
index dc82a35..2b9b4e4 100644
--- a/reference/decimal_places_df.html
+++ b/reference/decimal_places_df.html
@@ -12,7 +12,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -38,10 +38,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/disperse.html b/reference/disperse.html
index 654d174..1e0897b 100644
--- a/reference/disperse.html
+++ b/reference/disperse.html
@@ -34,7 +34,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -60,10 +60,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/duplicate_count.html b/reference/duplicate_count.html
index d868d17..85da3cc 100644
--- a/reference/duplicate_count.html
+++ b/reference/duplicate_count.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/duplicate_count_colpair.html b/reference/duplicate_count_colpair.html
index ea73bf1..d8ad703 100644
--- a/reference/duplicate_count_colpair.html
+++ b/reference/duplicate_count_colpair.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/duplicate_detect.html b/reference/duplicate_detect.html
index 119f26b..e915b58 100644
--- a/reference/duplicate_detect.html
+++ b/reference/duplicate_detect.html
@@ -28,7 +28,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -54,10 +54,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/duplicate_tally.html b/reference/duplicate_tally.html
index 710a508..bb8d71d 100644
--- a/reference/duplicate_tally.html
+++ b/reference/duplicate_tally.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/fractional-rounding.html b/reference/fractional-rounding.html
index c0a5b87..335d2cd 100644
--- a/reference/fractional-rounding.html
+++ b/reference/fractional-rounding.html
@@ -32,7 +32,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -58,10 +58,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/function_map.html b/reference/function_map.html
index 6cc7edc..4c05817 100644
--- a/reference/function_map.html
+++ b/reference/function_map.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/function_map_seq.html b/reference/function_map_seq.html
index 0e1c61a..251776d 100644
--- a/reference/function_map_seq.html
+++ b/reference/function_map_seq.html
@@ -32,7 +32,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -58,10 +58,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/function_map_total_n.html b/reference/function_map_total_n.html
index 39967c1..2320967 100644
--- a/reference/function_map_total_n.html
+++ b/reference/function_map_total_n.html
@@ -30,7 +30,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -56,10 +56,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grim-stats.html b/reference/grim-stats.html
index a19cf62..7c5cea1 100644
--- a/reference/grim-stats.html
+++ b/reference/grim-stats.html
@@ -34,7 +34,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -60,10 +60,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grim.html b/reference/grim.html
index 0c1df1b..c9cdaa0 100644
--- a/reference/grim.html
+++ b/reference/grim.html
@@ -22,7 +22,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -48,10 +48,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grim_granularity.html b/reference/grim_granularity.html
index 8466d0c..301a943 100644
--- a/reference/grim_granularity.html
+++ b/reference/grim_granularity.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grim_map.html b/reference/grim_map.html
index ddfecd4..5c3ed54 100644
--- a/reference/grim_map.html
+++ b/reference/grim_map.html
@@ -24,7 +24,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -50,10 +50,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grim_map_seq.html b/reference/grim_map_seq.html
index 2f9de2a..bb3398e 100644
--- a/reference/grim_map_seq.html
+++ b/reference/grim_map_seq.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grim_map_total_n.html b/reference/grim_map_total_n.html
index a3f5d3a..811532b 100644
--- a/reference/grim_map_total_n.html
+++ b/reference/grim_map_total_n.html
@@ -40,7 +40,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -66,10 +66,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grim_plot.html b/reference/grim_plot.html
index a450f4c..89465da 100644
--- a/reference/grim_plot.html
+++ b/reference/grim_plot.html
@@ -28,7 +28,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -54,10 +54,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grimmer.html b/reference/grimmer.html
index 723e00f..b09dce7 100644
--- a/reference/grimmer.html
+++ b/reference/grimmer.html
@@ -20,7 +20,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -46,10 +46,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grimmer_map.html b/reference/grimmer_map.html
index 2641e6b..5acd6d7 100644
--- a/reference/grimmer_map.html
+++ b/reference/grimmer_map.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grimmer_map_seq.html b/reference/grimmer_map_seq.html
index 60d7092..0e063cb 100644
--- a/reference/grimmer_map_seq.html
+++ b/reference/grimmer_map_seq.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/grimmer_map_total_n.html b/reference/grimmer_map_total_n.html
index dd02b2d..4891743 100644
--- a/reference/grimmer_map_total_n.html
+++ b/reference/grimmer_map_total_n.html
@@ -40,7 +40,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -66,10 +66,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/index.html b/reference/index.html
index d9a3e23..5b68e28 100644
--- a/reference/index.html
+++ b/reference/index.html
@@ -10,7 +10,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -36,10 +36,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
@@ -241,7 +241,7 @@ Summarize scrutiny tests
Summarize output of sequence mappers and total-n mappers
-
Infrastructure
+
Developer tools
Helpers for implementing error detection techniques
diff --git a/reference/is_numeric_like.html b/reference/is_numeric_like.html
index 681c021..5fa14c6 100644
--- a/reference/is_numeric_like.html
+++ b/reference/is_numeric_like.html
@@ -34,7 +34,7 @@
scrutiny
-
0.3.0.9000
+
0.4.0
@@ -60,10 +60,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/manage_helper_col.html b/reference/manage_helper_col.html
index 90ce411..df7847c 100644
--- a/reference/manage_helper_col.html
+++ b/reference/manage_helper_col.html
@@ -32,7 +32,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -58,10 +58,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/manage_key_colnames.html b/reference/manage_key_colnames.html
index 84443f8..5532a65 100644
--- a/reference/manage_key_colnames.html
+++ b/reference/manage_key_colnames.html
@@ -40,7 +40,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -66,10 +66,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/parens-extractors.html b/reference/parens-extractors.html
index fc18a00..d672daa 100644
--- a/reference/parens-extractors.html
+++ b/reference/parens-extractors.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/pigs1.html b/reference/pigs1.html
index 11cd3d7..b7182a0 100644
--- a/reference/pigs1.html
+++ b/reference/pigs1.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/pigs2.html b/reference/pigs2.html
index e4bbf99..8b9ff15 100644
--- a/reference/pigs2.html
+++ b/reference/pigs2.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/pigs3.html b/reference/pigs3.html
index ff69cd3..d572797 100644
--- a/reference/pigs3.html
+++ b/reference/pigs3.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/pigs4.html b/reference/pigs4.html
index 41f7081..cb31433 100644
--- a/reference/pigs4.html
+++ b/reference/pigs4.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/pigs5.html b/reference/pigs5.html
index afbf059..4637d85 100644
--- a/reference/pigs5.html
+++ b/reference/pigs5.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/pipe.html b/reference/pipe.html
index f60e977..a8a15c3 100644
--- a/reference/pipe.html
+++ b/reference/pipe.html
@@ -12,7 +12,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -38,10 +38,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/reround.html b/reference/reround.html
index 6afd71b..a5b5dcd 100644
--- a/reference/reround.html
+++ b/reference/reround.html
@@ -24,7 +24,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -50,10 +50,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/restore_zeros.html b/reference/restore_zeros.html
index 376f14c..3d1bb27 100644
--- a/reference/restore_zeros.html
+++ b/reference/restore_zeros.html
@@ -32,7 +32,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -58,10 +58,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/reverse_map_seq.html b/reference/reverse_map_seq.html
index 160921f..29cc1f7 100644
--- a/reference/reverse_map_seq.html
+++ b/reference/reverse_map_seq.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/reverse_map_total_n.html b/reference/reverse_map_total_n.html
index 5872112..e9961ed 100644
--- a/reference/reverse_map_total_n.html
+++ b/reference/reverse_map_total_n.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/rounding-common.html b/reference/rounding-common.html
index 4cc18d3..168fecc 100644
--- a/reference/rounding-common.html
+++ b/reference/rounding-common.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/rounding-uncommon.html b/reference/rounding-uncommon.html
index b34f6a2..a9c41b9 100644
--- a/reference/rounding-uncommon.html
+++ b/reference/rounding-uncommon.html
@@ -32,7 +32,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -58,10 +58,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/rounding_bias.html b/reference/rounding_bias.html
index d025ab1..efaa6bb 100644
--- a/reference/rounding_bias.html
+++ b/reference/rounding_bias.html
@@ -14,7 +14,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -40,10 +40,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/row_to_colnames.html b/reference/row_to_colnames.html
index 230846c..4e06b49 100644
--- a/reference/row_to_colnames.html
+++ b/reference/row_to_colnames.html
@@ -18,7 +18,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -44,10 +44,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/scrutiny-package.html b/reference/scrutiny-package.html
index 7def054..d6a4050 100644
--- a/reference/scrutiny-package.html
+++ b/reference/scrutiny-package.html
@@ -12,7 +12,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -38,10 +38,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/sd-binary.html b/reference/sd-binary.html
index ca5a1a0..1d4820b 100644
--- a/reference/sd-binary.html
+++ b/reference/sd-binary.html
@@ -34,7 +34,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -60,10 +60,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/seq-decimal.html b/reference/seq-decimal.html
index e109561..19a3e56 100644
--- a/reference/seq-decimal.html
+++ b/reference/seq-decimal.html
@@ -38,7 +38,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -64,10 +64,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/seq-predicates.html b/reference/seq-predicates.html
index dc023b3..1a8b005 100644
--- a/reference/seq-predicates.html
+++ b/reference/seq-predicates.html
@@ -12,7 +12,7 @@
NA elements of x are handled in a nuanced way. See Value section below
-and the examples in vignette("infrastructure"), section NA handling.'>Is a vector a certain kind of sequence? — seq-predicates • scrutiny Is a vector a certain kind of sequence? — seq-predicates • scrutiny
@@ -36,7 +36,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -62,10 +62,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
@@ -107,7 +107,7 @@
sides per value pair. By default (test_linear = TRUE
), these functions
also test for linearity, like is_seq_linear()
.
NA
elements of x
are handled in a nuanced way. See Value section below
-and the examples in vignette("infrastructure")
, section NA handling .
+and the examples in vignette("devtools")
, section NA handling .
diff --git a/reference/seq_disperse.html b/reference/seq_disperse.html
index e52fc55..e0057d2 100644
--- a/reference/seq_disperse.html
+++ b/reference/seq_disperse.html
@@ -22,7 +22,7 @@
scrutiny
-
0.3.0.9000
+
0.4.0
@@ -48,10 +48,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/seq_length.html b/reference/seq_length.html
index ffb10c3..fb54f71 100644
--- a/reference/seq_length.html
+++ b/reference/seq_length.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/seq_test_ranking.html b/reference/seq_test_ranking.html
index 5fb001b..47fe703 100644
--- a/reference/seq_test_ranking.html
+++ b/reference/seq_test_ranking.html
@@ -16,7 +16,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -42,10 +42,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/split_by_parens.html b/reference/split_by_parens.html
index 70fced6..8298d07 100644
--- a/reference/split_by_parens.html
+++ b/reference/split_by_parens.html
@@ -22,7 +22,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -48,10 +48,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/subset-superset.html b/reference/subset-superset.html
index 35ea359..7d036e1 100644
--- a/reference/subset-superset.html
+++ b/reference/subset-superset.html
@@ -54,7 +54,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -80,10 +80,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/tidyeval.html b/reference/tidyeval.html
index bbca471..a580715 100644
--- a/reference/tidyeval.html
+++ b/reference/tidyeval.html
@@ -160,7 +160,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -186,10 +186,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/unnest_consistency_cols.html b/reference/unnest_consistency_cols.html
index 55288f4..eda7bf2 100644
--- a/reference/unnest_consistency_cols.html
+++ b/reference/unnest_consistency_cols.html
@@ -24,7 +24,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -50,10 +50,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/unround.html b/reference/unround.html
index a4af6b8..3da6fa4 100644
--- a/reference/unround.html
+++ b/reference/unround.html
@@ -20,7 +20,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -46,10 +46,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/write_doc_audit.html b/reference/write_doc_audit.html
index 99ebe86..c872d55 100644
--- a/reference/write_doc_audit.html
+++ b/reference/write_doc_audit.html
@@ -26,7 +26,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -52,10 +52,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/write_doc_audit_seq.html b/reference/write_doc_audit_seq.html
index 3d471d0..722666b 100644
--- a/reference/write_doc_audit_seq.html
+++ b/reference/write_doc_audit_seq.html
@@ -26,7 +26,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -52,10 +52,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/write_doc_audit_total_n.html b/reference/write_doc_audit_total_n.html
index 3f7a77a..4aefc8b 100644
--- a/reference/write_doc_audit_total_n.html
+++ b/reference/write_doc_audit_total_n.html
@@ -26,7 +26,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -52,10 +52,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/reference/write_doc_factory_map_conventions.html b/reference/write_doc_factory_map_conventions.html
index df125ed..1bf03ef 100644
--- a/reference/write_doc_factory_map_conventions.html
+++ b/reference/write_doc_factory_map_conventions.html
@@ -22,7 +22,7 @@
scrutiny
- 0.3.0.9000
+ 0.4.0
@@ -48,10 +48,10 @@
Rounding options
Implementing your consistency test
-
+
Rounding in depth
Consistency tests in depth
- General infrastructure
+ Developer tools
Data wrangling
diff --git a/search.json b/search.json
index d82e3a8..ea1e5c7 100644
--- a/search.json
+++ b/search.json
@@ -1 +1 @@
-[{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement jung-lukas@gmx.net. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://lhdjung.github.io/scrutiny/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"GNU General Public License","title":"GNU General Public License","text":"Version 3, 29 June 2007Copyright © 2007 Free Software Foundation, Inc. Everyone permitted copy distribute verbatim copies license document, changing allowed.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"preamble","dir":"","previous_headings":"","what":"Preamble","title":"GNU General Public License","text":"GNU General Public License free, copyleft license software kinds works. licenses software practical works designed take away freedom share change works. contrast, GNU General Public License intended guarantee freedom share change versions program–make sure remains free software users. , Free Software Foundation, use GNU General Public License software; applies also work released way authors. can apply programs, . speak free software, referring freedom, price. General Public Licenses designed make sure freedom distribute copies free software (charge wish), receive source code can get want , can change software use pieces new free programs, know can things. protect rights, need prevent others denying rights asking surrender rights. Therefore, certain responsibilities distribute copies software, modify : responsibilities respect freedom others. example, distribute copies program, whether gratis fee, must pass recipients freedoms received. must make sure , , receive can get source code. must show terms know rights. Developers use GNU GPL protect rights two steps: (1) assert copyright software, (2) offer License giving legal permission copy, distribute /modify . developers’ authors’ protection, GPL clearly explains warranty free software. users’ authors’ sake, GPL requires modified versions marked changed, problems attributed erroneously authors previous versions. devices designed deny users access install run modified versions software inside , although manufacturer can . fundamentally incompatible aim protecting users’ freedom change software. systematic pattern abuse occurs area products individuals use, precisely unacceptable. Therefore, designed version GPL prohibit practice products. problems arise substantially domains, stand ready extend provision domains future versions GPL, needed protect freedom users. Finally, every program threatened constantly software patents. States allow patents restrict development use software general-purpose computers, , wish avoid special danger patents applied free program make effectively proprietary. prevent , GPL assures patents used render program non-free. precise terms conditions copying, distribution modification follow.","code":""},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_0-definitions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"0. Definitions","title":"GNU General Public License","text":"“License” refers version 3 GNU General Public License. “Copyright” also means copyright-like laws apply kinds works, semiconductor masks. “Program” refers copyrightable work licensed License. licensee addressed “”. “Licensees” “recipients” may individuals organizations. “modify” work means copy adapt part work fashion requiring copyright permission, making exact copy. resulting work called “modified version” earlier work work “based ” earlier work. “covered work” means either unmodified Program work based Program. “propagate” work means anything , without permission, make directly secondarily liable infringement applicable copyright law, except executing computer modifying private copy. Propagation includes copying, distribution (without modification), making available public, countries activities well. “convey” work means kind propagation enables parties make receive copies. Mere interaction user computer network, transfer copy, conveying. interactive user interface displays “Appropriate Legal Notices” extent includes convenient prominently visible feature (1) displays appropriate copyright notice, (2) tells user warranty work (except extent warranties provided), licensees may convey work License, view copy License. interface presents list user commands options, menu, prominent item list meets criterion.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_1-source-code","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"1. Source Code","title":"GNU General Public License","text":"“source code” work means preferred form work making modifications . “Object code” means non-source form work. “Standard Interface” means interface either official standard defined recognized standards body, , case interfaces specified particular programming language, one widely used among developers working language. “System Libraries” executable work include anything, work whole, () included normal form packaging Major Component, part Major Component, (b) serves enable use work Major Component, implement Standard Interface implementation available public source code form. “Major Component”, context, means major essential component (kernel, window system, ) specific operating system () executable work runs, compiler used produce work, object code interpreter used run . “Corresponding Source” work object code form means source code needed generate, install, (executable work) run object code modify work, including scripts control activities. However, include work’s System Libraries, general-purpose tools generally available free programs used unmodified performing activities part work. example, Corresponding Source includes interface definition files associated source files work, source code shared libraries dynamically linked subprograms work specifically designed require, intimate data communication control flow subprograms parts work. Corresponding Source need include anything users can regenerate automatically parts Corresponding Source. Corresponding Source work source code form work.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_2-basic-permissions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"2. Basic Permissions","title":"GNU General Public License","text":"rights granted License granted term copyright Program, irrevocable provided stated conditions met. License explicitly affirms unlimited permission run unmodified Program. output running covered work covered License output, given content, constitutes covered work. License acknowledges rights fair use equivalent, provided copyright law. may make, run propagate covered works convey, without conditions long license otherwise remains force. may convey covered works others sole purpose make modifications exclusively , provide facilities running works, provided comply terms License conveying material control copyright. thus making running covered works must exclusively behalf, direction control, terms prohibit making copies copyrighted material outside relationship . Conveying circumstances permitted solely conditions stated . Sublicensing allowed; section 10 makes unnecessary.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_3-protecting-users-legal-rights-from-anti-circumvention-law","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"3. Protecting Users’ Legal Rights From Anti-Circumvention Law","title":"GNU General Public License","text":"covered work shall deemed part effective technological measure applicable law fulfilling obligations article 11 WIPO copyright treaty adopted 20 December 1996, similar laws prohibiting restricting circumvention measures. convey covered work, waive legal power forbid circumvention technological measures extent circumvention effected exercising rights License respect covered work, disclaim intention limit operation modification work means enforcing, work’s users, third parties’ legal rights forbid circumvention technological measures.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_4-conveying-verbatim-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"4. Conveying Verbatim Copies","title":"GNU General Public License","text":"may convey verbatim copies Program’s source code receive , medium, provided conspicuously appropriately publish copy appropriate copyright notice; keep intact notices stating License non-permissive terms added accord section 7 apply code; keep intact notices absence warranty; give recipients copy License along Program. may charge price price copy convey, may offer support warranty protection fee.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_5-conveying-modified-source-versions","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"5. Conveying Modified Source Versions","title":"GNU General Public License","text":"may convey work based Program, modifications produce Program, form source code terms section 4, provided also meet conditions: ) work must carry prominent notices stating modified , giving relevant date. b) work must carry prominent notices stating released License conditions added section 7. requirement modifies requirement section 4 “keep intact notices”. c) must license entire work, whole, License anyone comes possession copy. License therefore apply, along applicable section 7 additional terms, whole work, parts, regardless packaged. License gives permission license work way, invalidate permission separately received . d) work interactive user interfaces, must display Appropriate Legal Notices; however, Program interactive interfaces display Appropriate Legal Notices, work need make . compilation covered work separate independent works, nature extensions covered work, combined form larger program, volume storage distribution medium, called “aggregate” compilation resulting copyright used limit access legal rights compilation’s users beyond individual works permit. Inclusion covered work aggregate cause License apply parts aggregate.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_6-conveying-non-source-forms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"6. Conveying Non-Source Forms","title":"GNU General Public License","text":"may convey covered work object code form terms sections 4 5, provided also convey machine-readable Corresponding Source terms License, one ways: ) Convey object code , embodied , physical product (including physical distribution medium), accompanied Corresponding Source fixed durable physical medium customarily used software interchange. b) Convey object code , embodied , physical product (including physical distribution medium), accompanied written offer, valid least three years valid long offer spare parts customer support product model, give anyone possesses object code either (1) copy Corresponding Source software product covered License, durable physical medium customarily used software interchange, price reasonable cost physically performing conveying source, (2) access copy Corresponding Source network server charge. c) Convey individual copies object code copy written offer provide Corresponding Source. alternative allowed occasionally noncommercially, received object code offer, accord subsection 6b. d) Convey object code offering access designated place (gratis charge), offer equivalent access Corresponding Source way place charge. need require recipients copy Corresponding Source along object code. place copy object code network server, Corresponding Source may different server (operated third party) supports equivalent copying facilities, provided maintain clear directions next object code saying find Corresponding Source. Regardless server hosts Corresponding Source, remain obligated ensure available long needed satisfy requirements. e) Convey object code using peer--peer transmission, provided inform peers object code Corresponding Source work offered general public charge subsection 6d. separable portion object code, whose source code excluded Corresponding Source System Library, need included conveying object code work. “User Product” either (1) “consumer product”, means tangible personal property normally used personal, family, household purposes, (2) anything designed sold incorporation dwelling. determining whether product consumer product, doubtful cases shall resolved favor coverage. particular product received particular user, “normally used” refers typical common use class product, regardless status particular user way particular user actually uses, expects expected use, product. product consumer product regardless whether product substantial commercial, industrial non-consumer uses, unless uses represent significant mode use product. “Installation Information” User Product means methods, procedures, authorization keys, information required install execute modified versions covered work User Product modified version Corresponding Source. information must suffice ensure continued functioning modified object code case prevented interfered solely modification made. convey object code work section , , specifically use , User Product, conveying occurs part transaction right possession use User Product transferred recipient perpetuity fixed term (regardless transaction characterized), Corresponding Source conveyed section must accompanied Installation Information. requirement apply neither third party retains ability install modified object code User Product (example, work installed ROM). requirement provide Installation Information include requirement continue provide support service, warranty, updates work modified installed recipient, User Product modified installed. Access network may denied modification materially adversely affects operation network violates rules protocols communication across network. Corresponding Source conveyed, Installation Information provided, accord section must format publicly documented (implementation available public source code form), must require special password key unpacking, reading copying.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_7-additional-terms","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"7. Additional Terms","title":"GNU General Public License","text":"“Additional permissions” terms supplement terms License making exceptions one conditions. Additional permissions applicable entire Program shall treated though included License, extent valid applicable law. additional permissions apply part Program, part may used separately permissions, entire Program remains governed License without regard additional permissions. convey copy covered work, may option remove additional permissions copy, part . (Additional permissions may written require removal certain cases modify work.) may place additional permissions material, added covered work, can give appropriate copyright permission. Notwithstanding provision License, material add covered work, may (authorized copyright holders material) supplement terms License terms: ) Disclaiming warranty limiting liability differently terms sections 15 16 License; b) Requiring preservation specified reasonable legal notices author attributions material Appropriate Legal Notices displayed works containing ; c) Prohibiting misrepresentation origin material, requiring modified versions material marked reasonable ways different original version; d) Limiting use publicity purposes names licensors authors material; e) Declining grant rights trademark law use trade names, trademarks, service marks; f) Requiring indemnification licensors authors material anyone conveys material (modified versions ) contractual assumptions liability recipient, liability contractual assumptions directly impose licensors authors. non-permissive additional terms considered “restrictions” within meaning section 10. Program received , part , contains notice stating governed License along term restriction, may remove term. license document contains restriction permits relicensing conveying License, may add covered work material governed terms license document, provided restriction survive relicensing conveying. add terms covered work accord section, must place, relevant source files, statement additional terms apply files, notice indicating find applicable terms. Additional terms, permissive non-permissive, may stated form separately written license, stated exceptions; requirements apply either way.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_8-termination","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"8. Termination","title":"GNU General Public License","text":"may propagate modify covered work except expressly provided License. attempt otherwise propagate modify void, automatically terminate rights License (including patent licenses granted third paragraph section 11). However, cease violation License, license particular copyright holder reinstated () provisionally, unless copyright holder explicitly finally terminates license, (b) permanently, copyright holder fails notify violation reasonable means prior 60 days cessation. Moreover, license particular copyright holder reinstated permanently copyright holder notifies violation reasonable means, first time received notice violation License (work) copyright holder, cure violation prior 30 days receipt notice. Termination rights section terminate licenses parties received copies rights License. rights terminated permanently reinstated, qualify receive new licenses material section 10.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_9-acceptance-not-required-for-having-copies","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"9. Acceptance Not Required for Having Copies","title":"GNU General Public License","text":"required accept License order receive run copy Program. Ancillary propagation covered work occurring solely consequence using peer--peer transmission receive copy likewise require acceptance. However, nothing License grants permission propagate modify covered work. actions infringe copyright accept License. Therefore, modifying propagating covered work, indicate acceptance License .","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_10-automatic-licensing-of-downstream-recipients","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"10. Automatic Licensing of Downstream Recipients","title":"GNU General Public License","text":"time convey covered work, recipient automatically receives license original licensors, run, modify propagate work, subject License. responsible enforcing compliance third parties License. “entity transaction” transaction transferring control organization, substantially assets one, subdividing organization, merging organizations. propagation covered work results entity transaction, party transaction receives copy work also receives whatever licenses work party’s predecessor interest give previous paragraph, plus right possession Corresponding Source work predecessor interest, predecessor can get reasonable efforts. may impose restrictions exercise rights granted affirmed License. example, may impose license fee, royalty, charge exercise rights granted License, may initiate litigation (including cross-claim counterclaim lawsuit) alleging patent claim infringed making, using, selling, offering sale, importing Program portion .","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_11-patents","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"11. Patents","title":"GNU General Public License","text":"“contributor” copyright holder authorizes use License Program work Program based. work thus licensed called contributor’s “contributor version”. contributor’s “essential patent claims” patent claims owned controlled contributor, whether already acquired hereafter acquired, infringed manner, permitted License, making, using, selling contributor version, include claims infringed consequence modification contributor version. purposes definition, “control” includes right grant patent sublicenses manner consistent requirements License. contributor grants non-exclusive, worldwide, royalty-free patent license contributor’s essential patent claims, make, use, sell, offer sale, import otherwise run, modify propagate contents contributor version. following three paragraphs, “patent license” express agreement commitment, however denominated, enforce patent (express permission practice patent covenant sue patent infringement). “grant” patent license party means make agreement commitment enforce patent party. convey covered work, knowingly relying patent license, Corresponding Source work available anyone copy, free charge terms License, publicly available network server readily accessible means, must either (1) cause Corresponding Source available, (2) arrange deprive benefit patent license particular work, (3) arrange, manner consistent requirements License, extend patent license downstream recipients. “Knowingly relying” means actual knowledge , patent license, conveying covered work country, recipient’s use covered work country, infringe one identifiable patents country reason believe valid. , pursuant connection single transaction arrangement, convey, propagate procuring conveyance , covered work, grant patent license parties receiving covered work authorizing use, propagate, modify convey specific copy covered work, patent license grant automatically extended recipients covered work works based . patent license “discriminatory” include within scope coverage, prohibits exercise , conditioned non-exercise one rights specifically granted License. may convey covered work party arrangement third party business distributing software, make payment third party based extent activity conveying work, third party grants, parties receive covered work , discriminatory patent license () connection copies covered work conveyed (copies made copies), (b) primarily connection specific products compilations contain covered work, unless entered arrangement, patent license granted, prior 28 March 2007. Nothing License shall construed excluding limiting implied license defenses infringement may otherwise available applicable patent law.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_12-no-surrender-of-others-freedom","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"12. No Surrender of Others’ Freedom","title":"GNU General Public License","text":"conditions imposed (whether court order, agreement otherwise) contradict conditions License, excuse conditions License. convey covered work satisfy simultaneously obligations License pertinent obligations, consequence may convey . example, agree terms obligate collect royalty conveying convey Program, way satisfy terms License refrain entirely conveying Program.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_13-use-with-the-gnu-affero-general-public-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"13. Use with the GNU Affero General Public License","title":"GNU General Public License","text":"Notwithstanding provision License, permission link combine covered work work licensed version 3 GNU Affero General Public License single combined work, convey resulting work. terms License continue apply part covered work, special requirements GNU Affero General Public License, section 13, concerning interaction network apply combination .","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_14-revised-versions-of-this-license","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"14. Revised Versions of this License","title":"GNU General Public License","text":"Free Software Foundation may publish revised /new versions GNU General Public License time time. new versions similar spirit present version, may differ detail address new problems concerns. version given distinguishing version number. Program specifies certain numbered version GNU General Public License “later version” applies , option following terms conditions either numbered version later version published Free Software Foundation. Program specify version number GNU General Public License, may choose version ever published Free Software Foundation. Program specifies proxy can decide future versions GNU General Public License can used, proxy’s public statement acceptance version permanently authorizes choose version Program. Later license versions may give additional different permissions. However, additional obligations imposed author copyright holder result choosing follow later version.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_15-disclaimer-of-warranty","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"15. Disclaimer of Warranty","title":"GNU General Public License","text":"WARRANTY PROGRAM, EXTENT PERMITTED APPLICABLE LAW. EXCEPT OTHERWISE STATED WRITING COPYRIGHT HOLDERS /PARTIES PROVIDE PROGRAM “” WITHOUT WARRANTY KIND, EITHER EXPRESSED IMPLIED, INCLUDING, LIMITED , IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE. ENTIRE RISK QUALITY PERFORMANCE PROGRAM . PROGRAM PROVE DEFECTIVE, ASSUME COST NECESSARY SERVICING, REPAIR CORRECTION.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_16-limitation-of-liability","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"16. Limitation of Liability","title":"GNU General Public License","text":"EVENT UNLESS REQUIRED APPLICABLE LAW AGREED WRITING COPYRIGHT HOLDER, PARTY MODIFIES /CONVEYS PROGRAM PERMITTED , LIABLE DAMAGES, INCLUDING GENERAL, SPECIAL, INCIDENTAL CONSEQUENTIAL DAMAGES ARISING USE INABILITY USE PROGRAM (INCLUDING LIMITED LOSS DATA DATA RENDERED INACCURATE LOSSES SUSTAINED THIRD PARTIES FAILURE PROGRAM OPERATE PROGRAMS), EVEN HOLDER PARTY ADVISED POSSIBILITY DAMAGES.","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"id_17-interpretation-of-sections-15-and-16","dir":"","previous_headings":"TERMS AND CONDITIONS","what":"17. Interpretation of Sections 15 and 16","title":"GNU General Public License","text":"disclaimer warranty limitation liability provided given local legal effect according terms, reviewing courts shall apply local law closely approximates absolute waiver civil liability connection Program, unless warranty assumption liability accompanies copy Program return fee. END TERMS CONDITIONS","code":""},{"path":"https://lhdjung.github.io/scrutiny/LICENSE.html","id":"how-to-apply-these-terms-to-your-new-programs","dir":"","previous_headings":"","what":"How to Apply These Terms to Your New Programs","title":"GNU General Public License","text":"develop new program, want greatest possible use public, best way achieve make free software everyone can redistribute change terms. , attach following notices program. safest attach start source file effectively state exclusion warranty; file least “copyright” line pointer full notice found. Also add information contact electronic paper mail. program terminal interaction, make output short notice like starts interactive mode: hypothetical commands show w show c show appropriate parts General Public License. course, program’s commands might different; GUI interface, use “box”. also get employer (work programmer) school, , sign “copyright disclaimer” program, necessary. information , apply follow GNU GPL, see . GNU General Public License permit incorporating program proprietary programs. program subroutine library, may consider useful permit linking proprietary applications library. want , use GNU Lesser General Public License instead License. first, please read .","code":" Copyright (C) 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 3 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. You should have received a copy of the GNU General Public License along with this program. If not, see . Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details."},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Consistency tests in depth","text":"implementing consistency tests R, shouldn’t start zero. vignette goes detail scrutiny’s support system writing new consistency testing functions. brief presentation, see vignette(\"consistency-tests-simple\"). Following present vignette dramatically simplify implementation basic advanced testing routines via function factories. enable write entire families functions streamlined way: familiar one scrutiny-style consistency test, immediately able make sense ones. true across levels consistency testing. outline levels, vignette, GRIM paradigmatic example. valid consistency test newly implemented least first step, ’ll happy accept pull request scrutiny. means ’ll implement core test , without even reading vignette . bare-bones, non-exported (!) function testing single set cases, grim_scalar(). vectorized version single-case function, grim(). specialized mapping function applies single-case function data frame, grim_map(). method audit() generic summarizes results number 3. visualization function plots results number 3, grim_plot(). mapping function checks slightly varied input values consistent respective reported values, grim_map_seq(). mapping function used total sample size reported (study two groups), individual group sizes, grim_map_total_n(). audit_seq() audit_total_n() already work output numbers 6 7, respectively. still specifically documented. use toy test called SCHLIM model demonstrate minimal steps needed implement consistency tests, scrutiny-style. Note SCHLIM doesn’t significance beyond standing serious consistency tests. real implementation might well complex brief code snippets . also recur existing functions implement actual tests, reader may familiar . Please make sure follow tidyverse style guide well scrutiny-specific conventions laid , wherever applicable. ’d like write new package, work free online book R Packages (Wickham Bryan 2023).","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"single-case","dir":"Articles","previous_headings":"","what":"1. Single-case","title":"Consistency tests in depth","text":"first function important one. contains core implementation test. Although exported , steps build , exported. function takes two arguments length 1 meant tested consistency . Typically, coercible numeric. means either numeric strings can converted numbers (see is_numeric_like()). function returns logical value length 1: ’s TRUE inputs mutually consistent, FALSE aren’t. arguments might still necessary, especially function reconstructs rounded numbers. argument determines function round numbers called rounding. function internally call reround(). goes “unrounding” (.e., reconstructing rounding bounds) unround(). See also vignette(\"rounding\"). single-case function performs rounding also need helper count decimal places, decimal_places_scalar(). function’s name test lowercase, followed _scalar refers one-case limit. function happens applicable multiple value sets already due R’s natural vectorization, leave _scalar skip next section. ’re building package, export function. (rarely case every single argument needs vectorized.)","code":"schlim_scalar <- function(y, n) { y <- as.numeric(y) n <- as.numeric(n) all(y / 3 > n) } schlim_scalar(y = 30, n = 4) #> [1] TRUE schlim_scalar(y = 2, n = 7) #> [1] FALSE"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"vectorized","dir":"Articles","previous_headings":"","what":"2. Vectorized","title":"Consistency tests in depth","text":"easiest way turn scalar function vectorized (.e., multiple-case) function run Vectorize() . name resulting function lower-case name test , also name single-case function without _scalar: Functions created way can useful quick testing, won’t used remaining part vignette. ’s functions like schlim() great build upon — unlike mapper functions, discussed next.","code":"schlim <- Vectorize(schlim_scalar) schlim(y = 10:15, n = 4) #> [1] FALSE FALSE FALSE TRUE TRUE TRUE"},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction-1","dir":"Articles","previous_headings":"3. Basic mapper","what":"Introduction","title":"Consistency tests in depth","text":"important practical use consistency test within scrutiny apply entire data frames , grim_map() . ’s also starting point every function . functions discussed remaining part vignette deal data frames. always use tibbles, strongly recommend . fact, mapper functions introduced require tibbles. might work correctly non-tibble data frames.","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"creating-basic-mappers-with-function_map","dir":"Articles","previous_headings":"3. Basic mapper","what":"Creating basic mappers with function_map()","title":"Consistency tests in depth","text":"safest easiest way create (basic) mapper via function_map(). function written way also guaranteed fulfill requirements mapper functions listed . ’s major benefit list requirements long, follow-functions remaining vignette assume mapper fulfills . troubles function_map(): important arguments: .fun single-case function section 1. .reported string vector naming reported statistics .fun tests consistency . need arguments .fun, .fun may arguments, well. .name_test simply names consistency test.","code":"schlim_map <- function_map( .fun = schlim_scalar, .reported = c(\"y\", \"n\"), .name_test = \"SCHLIM\" ) # Example data: df1 <- tibble::tibble(y = 16:25, n = 3:12) schlim_map(df1) #> # A tibble: 10 × 3 #> y n consistency #> #> 1 16 3 TRUE #> 2 17 4 TRUE #> 3 18 5 TRUE #> 4 19 6 TRUE #> 5 20 7 FALSE #> 6 21 8 FALSE #> 7 22 9 FALSE #> 8 23 10 FALSE #> 9 24 11 FALSE #> 10 25 12 FALSE"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"context-and-export","dir":"Articles","previous_headings":"3. Basic mapper > Creating basic mappers with function_map()","what":"Context and export","title":"Consistency tests in depth","text":"can see, function_map() helper used inside functions creating function() — instead, takes place function() . makes -called function factory, precisely, function operator (Wickham 2019). already met base::Vectorize() section 2, also function operator, general straightforward one. export function manufactured way package, make sure follow purrr FAQ. (Incredible sounds, scrutiny take role purrr.) version look like :","code":"schlim_map <- function(...) \"dummy\" .onLoad <- function(lib, pkg) { schlim_map <<- scrutiny::function_map( .fun = schlim_scalar, .reported = c(\"y\", \"n\"), .name_test = \"SCHLIM\" ) }"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"identifying-columns","dir":"Articles","previous_headings":"3. Basic mapper > Creating basic mappers with function_map()","what":"Identifying columns","title":"Consistency tests in depth","text":"factory-made functions come special convenience feature: .reported values inserted list function’s parameters. means don’t need data frame column names .reported values. Instead, can specify arguments names names actual columns: columns neither present data frame identified via arguments, precise error:","code":"df2 <- df1 names(df2) <- c(\"foo\", \"bar\") df2 #> # A tibble: 10 × 2 #> foo bar #> #> 1 16 3 #> 2 17 4 #> 3 18 5 #> 4 19 6 #> 5 20 7 #> 6 21 8 #> 7 22 9 #> 8 23 10 #> 9 24 11 #> 10 25 12 schlim_map(df2, y = foo, n = bar) #> # A tibble: 10 × 3 #> y n consistency #> #> 1 16 3 TRUE #> 2 17 4 TRUE #> 3 18 5 TRUE #> 4 19 6 TRUE #> 5 20 7 FALSE #> 6 21 8 FALSE #> 7 22 9 FALSE #> 8 23 10 FALSE #> 9 24 11 FALSE #> 10 25 12 FALSE schlim_map(df2, y = foo) #> Error in `check_factory_key_args_names()` at scrutiny/R/function-factory-helpers.R:274:3: #> ! Column `n` is missing from `data`. #> ✖ It should be a column of the input data frame. #> ℹ Alternatively, specify the `n` argument of `schlim_map()` as the name of the #> equivalent column. # With a wrong identification: schlim_map(df2, n = mike) #> Error in `check_factory_key_args_values()` at scrutiny/R/function-factory-helpers.R:273:3: #> ! `mike` is not a column name of `data`. #> ✖ The `n` argument of `schlim_map()` was specified as `mike`, but there is no #> column in `data` called `mike`."},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"drawbacks","dir":"Articles","previous_headings":"3. Basic mapper > Creating basic mappers with function_map()","what":"Drawbacks","title":"Consistency tests in depth","text":"function_map() helpful, ever use ? four reasons: Functions produced function_map() don’t tailor-made checks, messages, transformations specific consistency test. (general checks error messages.) limited capabilities create columns internally \"consistency\": Values columns need produced basic *_scalar() function. (might replace tailor-made functionality creating reason column output handwritten grimmer_map(), currently experimental.) don’t support helper columns (see Terminology ). Finally, calling manufactured function, test-specific arguments user might specify via … (dots) won’t trigger RStudio’s autocomplete. dangerous functions use dots , calling function produced function_map(), misspelled argument names always throw error. grim_map(), grimmer_map(), debit_map() “handwritten” flexibility columns beyond \"consistency\". example, show_rec argument grim_map() ratio column function’s output possible function_map(). However, issues don’t affect \"consistency\" results, simply going function_map() might often better option. ’s choose , skip right section 4.","code":""},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction-2","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"Introduction","title":"Consistency tests in depth","text":"remaining part section 3 explains manually write mapper functions like grim_map(), grimmer_map(), debit_map(). quite detailed ’s important get things right: Every function rest vignette builds . Still, practical steps complicated, can see code examples.","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"terminology","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"Terminology","title":"Consistency tests in depth","text":"’s important distinguish key arguments columns arguments columns. key arguments scalar vectorized consistency-testing function values tested consistency , x n grim(). extension, key columns contain values. Every key column name respective key argument. helper column column key , still factors consistency test. example optional items column grim_map()’s input data frame: transforms n column, turn affects test outcomes. However, helper columns need work via key columns. Key helper columns tested columns factor test. columns non-tested.","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"requirements","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"Requirements","title":"Consistency tests in depth","text":"general system implementing consistency tests needs consistency . especially true basic mapper functions, functions line rely mapper’s output specific properties. level detail requirements might seem pedantic. still encourage follow every step handwriting new mapping function. ’s easier looks first, many aspects indispensable. interplay mapper higher-level functions follows carefully concerted system. mapper misses one ingredient, functions may fail. () requirements basic mapping function : name ends _map instead _scalar otherwise name respective _scalar function. first argument, data, tibble (data frame) contains key columns respective consistency test. columns permitted. mapper’s user never needs include helper columns can always replace specifying arguments names columns. user specifies argument input data frame contains column name, function throws error. column input data frame named \"consistency\". return value tibble data frame contains key input columns. types columns input data frame. first (.e., leftmost) columns output, even input isn’t ordered way. columns modified within mapping function, output include modified columns, original ones. Examples can effects helper columns, also change displayed \"x\" column output grim_map(percent = TRUE). output must test TRUE is_map_df() is_map_basic_df(), FALSE two is_map_*() functions. Helper columns included output unless transform one key columns. case, representing output confusing effects already played via transformed key column(s). every helper column performs transformations, mapper logical argument, TRUE default, determines whether helper column transforms key column(s). TRUE, helper column included output . FALSE, helper column included transformation takes place. name logical argument start merge_, followed name helper column question. example optional items column grim_map()’s input data frame, together function’s items merge_items arguments. work helper columns, call manage_helper_col() within mapper. output data frame also includes logical column named \"consistency\". contains results consistency test, determined respective *_scalar() function. row, \"consistency\" TRUE values left mutually consistent, FALSE aren’t. column placed immediately right group key (, potentially, helper) columns. underlying single-case function performs rounding unrounding, internally call reround() /unround(), respectively. output data frame mapper function inherit S3 class (see section S3 classes ) \"scr_rounding_up_or_down\": consists \"scr_rounding_\" followed rounding specification, e.g., \"up_or_down\". latter also default rounding unrounding specification. specification can supplied user via argument called rounding, passed single-case function. reround() called within mapper, arguments need passed mapper, arguments, defaults. applies unround(). output data frame inherits S3 class starts \"scr_\" (short scrutiny), followed name mapper function. example, output grim_map() inherits \"scr_grim_map\" class. \"scr_\" prefix necessary follow-computations introduced , used even within functions part scrutiny. classes added output data frame also start \"scr_\". None end \"_map\".","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"implications","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"Implications","title":"Consistency tests in depth","text":"implications requirements, fact design space mapper functions restricted ways: Anything factors consistency test tested columns needs conveyed mapper function via arguments. example rounding argument grim_map(). Mapper functions don’t need allow helper columns. input data frame necessarily tibble, output data frame . input data frame never contains column named \"consistency\", output data frame always . Key columns may may modified helper columns /arguments. number key columns doesn’t change input output data frames. output data frame may may contain non-tested columns input. may may contain non-tested columns created within mapper function . (can useful, \"ratio\" grim_map()’s output.) non-tested, non-\"consistency\" columns go right \"consistency\". number key columns plus number helper columns output \\(k\\), index \"consistency\" \\(k+1\\). Besides \"scr_*_map\" class, output data frame may inherit number classes added within mapper, long start \"scr_\" don’t end \"_map\". can’t inherit \"grouped_df\" \"rowwise_df\" classes added dplyr::group_by() dplyr::rowwise(), respectively. either functions called within mapper, needs followed dplyr::ungroup() point. columns input data frame organized like : contrast, columns output data frame organized like :","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"practical-steps","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"Practical steps","title":"Consistency tests in depth","text":"actually write mapper functions? , recommend function_map(). two functions created similar don’t many options. course, can manually add code options like long requirements still met. Apply *_scalar() function input data frame using purrr::pmap_lgl(): Alternatively, might call dplyr::rowwise() directly mutate \"consistency\". don’t recommend approach dplyr::rowwise() quite slow. call check_mapper_input_colnames() required adds safety function. Also, see manage_key_colnames() grants user flexibility naming key columns. approaches lead results:","code":"schlim_map_alt1 <- function(data, ...) { scrutiny::check_mapper_input_colnames(data, c(\"y\", \"n\"), \"SCHLIM\") tibble::tibble( y = data$y, n = data$n, consistency = purrr::pmap_lgl(data, schlim_scalar, ...) ) %>% add_class(\"scr_schlim_map\") # See section \"S3 classes\" below } schlim_map_alt2 <- function(data, ...) { scrutiny::check_mapper_input_colnames(data, c(\"y\", \"n\"), \"SCHLIM\") data %>% dplyr::rowwise() %>% dplyr::mutate(consistency = schlim_scalar(y, n, ...)) %>% dplyr::ungroup() %>% dplyr::relocate(y, n, consistency) %>% add_class(\"scr_schlim_map\") # See section \"S3 classes\" below } schlim_map_alt1(df1) #> # A tibble: 10 × 3 #> y n consistency #> #> 1 16 3 TRUE #> 2 17 4 TRUE #> 3 18 5 TRUE #> 4 19 6 TRUE #> 5 20 7 FALSE #> 6 21 8 FALSE #> 7 22 9 FALSE #> 8 23 10 FALSE #> 9 24 11 FALSE #> 10 25 12 FALSE schlim_map_alt2(df1) #> # A tibble: 10 × 3 #> y n consistency #> #> 1 16 3 TRUE #> 2 17 4 TRUE #> 3 18 5 TRUE #> 4 19 6 TRUE #> 5 20 7 FALSE #> 6 21 8 FALSE #> 7 22 9 FALSE #> 8 23 10 FALSE #> 9 24 11 FALSE #> 10 25 12 FALSE"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"testing","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"Testing","title":"Consistency tests in depth","text":"let function_map() produce equivalent function make sure returns output handwritten one. compare two output data frames, don’t just eyeball . Use waldo::compare() , already run tests testthat, expect_equal(). handwritten mapper creates new columns beyond \"consistency\", ’ll remove output first. Don’t use helper columns testing function_map() can’t handle .","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"s3-classes","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"S3 classes","title":"Consistency tests in depth","text":"don’t know S3 classes , don’t worry. Just copy paste function , call end mapper function. x output data frame, new_class string vector. new_class consists one “classes” added existing classes x. can access classes object carries — “inherits” — calling class():","code":"add_class <- function(x, new_class) { class(x) <- c(new_class, class(x)) x } some_object <- tibble::tibble(x = 5) some_object <- add_class(some_object, \"dummy class\") class(some_object) #> [1] \"dummy class\" \"tbl_df\" \"tbl\" \"data.frame\""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"internal-helpers","dir":"Articles","previous_headings":"3. Basic mapper > Writing mappers manually","what":"Internal helpers","title":"Consistency tests in depth","text":"Within scrutiny, many functions exported users internally call helper functions , add_class(). might writing function following design exported scrutiny function, suddenly can’t access unknown function seem need! ’d like employ internal helper , specify namespace three colons, like scrutiny:::add_class. However, use trick copy paste helper’s source code source code. (’s left parentheses — return function .) Never rely calling function :::, internals actually meant users. can easily shift vanish without notice. develop package, see blogpost Thomas Lin Pedersen information using internal code packages. particular, package developers mind licenses copying code scrutiny scrutiny GPL-3 licensed. directly looking internal helpers scrutiny’s source code, start utils.R file. helpers can found , every helper utils.R documented.","code":""},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction-3","dir":"Articles","previous_headings":"4. audit() method","what":"Introduction","title":"Consistency tests in depth","text":"audit() S3 generic summarizing scrutiny’s test result data frames, especially mapper functions grim_map(). always return descriptive statistics nothing else. Every mapper function corresponding audit() method. aspect object-oriented programming (OOP), scrutiny’s use OOP simple even low standards R. mapper function’s output already inherits specific class, \"scr_grim_map\", \"scr_grimmer_map\", \"scr_debit_map\". schlim_map(), added \"scr_schlim_map\" class addition existing classes:","code":"df1_tested <- schlim_map(df1) class(df1_tested) #> [1] \"scr_schlim_map\" \"tbl_df\" \"tbl\" \"data.frame\""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"basics","dir":"Articles","previous_headings":"4. audit() method > Introduction","what":"Basics","title":"Consistency tests in depth","text":"Every audit() method consistency test results insofar consistency tests . single argument named data. return value tibble least columns: incons_cases counts inconsistent cases, .e., number rows mapper’s output \"consistency\" FALSE. all_cases total number rows mapper’s output. incons_rate ratio incons_cases all_cases. Apart , see descriptive statistics audit() method compute. Means variables *_map() function’s output ratios might sensible choices. existing audit() methods consistency tests return tibbles single row . makes sense obvious grouping variable input data frame, lead multiple rows audit()’s output. However, might good reasons multiple rows summarizing results tests, requirement.","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"practical-steps-1","dir":"Articles","previous_headings":"4. audit() method > Introduction","what":"Practical steps","title":"Consistency tests in depth","text":"audit() method simply function named audit plus dot specific class. Call audit_cols_minimal() within method create tibble three required columns. don’t use audit_cols_minimal(), call check_audit_special() method. can still add summary columns tibble returned audit_cols_minimal(). Use dplyr::mutate() similar.","code":"# The `name_test` argument is only for the alert # that might be issued by `check_audit_special()`: audit.scr_schlim_map <- function(data) { audit_cols_minimal(data, name_test = \"SCHLIM\") } # This calls our new method: audit(df1_tested) #> # A tibble: 1 × 3 #> incons_cases all_cases incons_rate #> #> 1 6 10 0.6 # This doesn't work because no method was defined: audit(iris) #> Error in UseMethod(\"audit\"): no applicable method for 'audit' applied to an object of class \"data.frame\""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"documentation-template","dir":"Articles","previous_headings":"4. audit() method","what":"Documentation template","title":"Consistency tests in depth","text":"audit() method documented page respective mapper function. section called Summaries audit(). Create write_doc_audit(): function prepares roxygen2 block section. fills three standard columns , leaves space describe columns might . Also, internal checks write_doc_audit() make sure programmed correct audit() method, represented value sample_output argument. Copy output console paste roxygen2 block *_map() function. preserve numbered list structure indenting roxygen2 comments Ctrl+Shift+/, leave empty lines pasted output rest block.","code":"audit_grim <- audit(grim_map(pigs1)) audit_grimmer <- audit(grimmer_map(pigs5)) write_doc_audit(sample_output = audit_grim, name_test = \"GRIM\") #> #' @section Summaries with `audit()`: There is an S3 method for `audit()`, so #> #' you can call `audit()` following `grim_map()` to get a summary of #> #' `grim_map()`'s results. It is a tibble with a single row and these #> #' columns -- #> #' #> #' 1. `incons_cases`: number of GRIM-inconsistent value sets. #> #' 2. `all_cases`: total number of value sets. #> #' 3. `incons_rate`: proportion of GRIM-inconsistent value sets. #> #' 4. `mean_grim_ratio`: #> #' 5. `incons_to_ratio`: #> #' 6. `testable_cases`: #> #' 7. `testable_rate`: write_doc_audit(sample_output = audit_grimmer, name_test = \"GRIMMER\") #> #' @section Summaries with `audit()`: There is an S3 method for `audit()`, so #> #' you can call `audit()` following `grimmer_map()` to get a summary of #> #' `grimmer_map()`'s results. It is a tibble with a single row and these #> #' columns -- #> #' #> #' 1. `incons_cases`: number of GRIMMER-inconsistent value sets. #> #' 2. `all_cases`: total number of value sets. #> #' 3. `incons_rate`: proportion of GRIMMER-inconsistent value sets. #> #' 4. `fail_grim`: #> #' 5. `fail_test1`: #> #' 6. `fail_test2`: #> #' 7. `fail_test3`:"},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction-4","dir":"Articles","previous_headings":"5. Visualization function","what":"Introduction","title":"Consistency tests in depth","text":"hard give general advice implement visualization functions results consistency tests. *_scalar() function, best way plot results greatly depends idiosyncratic nature consistency test . comparing looks grim_plot() debit_plot(), becomes clear two different things going . (mainly granularity crucial GRIM DEBIT.)","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"requirements-1","dir":"Articles","previous_headings":"5. Visualization function","what":"Requirements","title":"Consistency tests in depth","text":"Nevertheless, general requirements apply scrutiny-style visualization functions. much like arbitrary conventions requirements mapper functions, often meet precise technical needs. Visualization functions, however, basis computations apart modifications additional ggplot2 layers. result, rules admittedly somewhat less important. violate , nobody sad . visualization functions based ggplot2. follow developers’ general advice using ggplot2 packages. Visualization functions don’t need implement newly created layers, geoms themes. Indeed, neither two existing visualization functions relies new layers. visualization function’s name test (lowercase), followed _plot. Naturally, doesn’t apply methods generic functions like plot() ggplot2::autoplot(). first argument, data, data frame result call respective mapper function, grim_map() debit_map(). visualization function makes sure true checking data inherits special class added within mapper, \"scr_grim_map\" \"scr_debit_map\". data fails check, function throws error. function display consistent inconsistent value sets. color defaults \"royalblue1\" consistent value sets \"red\" inconsistent ones. user can override defaults via two arguments named color_cons consistent value sets color_incons inconsistent ones. certain layers optional rather essential plot, display can controlled via logical arguments start show_. Examples show_data grim_plot() show_outer_boxes debit_plot(). arguments kind start show_. defaults (usually TRUE, requirement).","code":""},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction-5","dir":"Articles","previous_headings":"6. Sequence mapper","what":"Introduction","title":"Consistency tests in depth","text":"reported values inconsistent, ’s never obvious . Consistency tests provide mathematical certainty results, trade-: don’t suggest clear causal story summary statistics. (Contrast reconstruction technique SPRITE, aim mathematical proof point towards major issues origins data.) One possible reason inconsistencies lies small mistakes computing /reporting original researchers. Indeed, Brown Heathers (2017) reanalyzed data sets behind GRIM inconsistencies, often found “straightforward explanation, minor error reported sample sizes, failure report exclusion participant” (p. 368). may therefore useful test numeric neighborhood inconsistent reported values. nearby values consistent statistics? , many ? problem might due simple oversight. However, cumbersome test candidate value manually, even test sequences manually created functions seq_distance(). Fortunately, scrutiny semi-automates process. grim_map_seq(), grimmer_map_seq() debit_map_seq() provide instant assessment whether inconsistent reported values close consistent numbers. also allow user specify many steps away reported value permitted looking consistent ones, well options.","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"practical-steps-2","dir":"Articles","previous_headings":"6. Sequence mapper","what":"Practical steps","title":"Consistency tests in depth","text":"Although code underlies fairly complex, functions written simple way. ones GRIM, GRIMMER, DEBIT: consistency test already implemented basic mapper function like grim_map(), grimmer_map(), debit_map() can receive *_map_seq() function just easily using function_map_seq(). due scrutiny’s streamlined design conventions — specifically, requirements mapper functions laid section 3. Let’s write sequence mapper SCHLIM: default, *_map_seq() function creates sequences around inconsistent input values. ’s primary purpose shed light inconsistencies reported statistics. Override default include_consistent = TRUE: function_map(), want export function produced function_map_seq(), follow purrr FAQ.","code":"grim_map_seq <- function_map_seq( .fun = grim_map, .reported = c(\"x\", \"n\"), .name_test = \"GRIM\", ) grimmer_map_seq <- function_map_seq( .fun = grimmer_map, .reported = c(\"x\", \"sd\", \"n\"), .name_test = \"GRIMMER\" ) debit_map_seq <- function_map_seq( .fun = debit_map, .reported = c(\"x\", \"sd\", \"n\"), .name_test = \"DEBIT\", ) schlim_map_seq <- function_map_seq( .fun = schlim_map, .reported = c(\"y\", \"n\"), .name_test = \"SCHLIM\" ) # Test dispersed sequences: out_seq <- schlim_map_seq(df1) out_seq #> # A tibble: 120 × 6 #> y n consistency diff_var case var #> #> 1 15 7 FALSE -5 1 y #> 2 16 7 FALSE -4 1 y #> 3 17 7 FALSE -3 1 y #> 4 18 7 FALSE -2 1 y #> 5 19 7 FALSE -1 1 y #> 6 21 7 FALSE 1 1 y #> 7 22 7 TRUE 2 1 y #> 8 23 7 TRUE 3 1 y #> 9 24 7 TRUE 4 1 y #> 10 25 7 TRUE 5 1 y #> # ℹ 110 more rows # Summarize: audit_seq(out_seq) #> # A tibble: 6 × 12 #> y n consistency hits_total hits_y hits_n diff_y diff_y_up diff_y_down #> #> 1 20 7 FALSE 9 4 5 2 2 NA #> 2 21 8 FALSE 6 2 4 4 4 NA #> 3 22 9 FALSE 4 0 4 NA NA NA #> 4 23 10 FALSE 3 0 3 NA NA NA #> 5 24 11 FALSE 2 0 2 NA NA NA #> 6 25 12 FALSE 2 0 2 NA NA NA #> # ℹ 3 more variables: diff_n , diff_n_up , diff_n_down df1 %>% schlim_map_seq(include_consistent = TRUE) %>% audit_seq() #> # A tibble: 10 × 12 #> y n consistency hits_total hits_y hits_n diff_y diff_y_up diff_y_down #> #> 1 16 3 TRUE 14 10 4 1 1 -1 #> 2 17 4 TRUE 13 9 4 1 1 -1 #> 3 18 5 TRUE 11 7 4 1 1 -1 #> 4 19 6 TRUE 10 5 5 1 1 NA #> 5 20 7 FALSE 9 4 5 2 2 NA #> 6 21 8 FALSE 6 2 4 4 4 NA #> 7 22 9 FALSE 4 0 4 NA NA NA #> 8 23 10 FALSE 3 0 3 NA NA NA #> 9 24 11 FALSE 2 0 2 NA NA NA #> 10 25 12 FALSE 2 0 2 NA NA NA #> # ℹ 3 more variables: diff_n , diff_n_up , diff_n_down # Compare with the original values: df1 #> # A tibble: 10 × 2 #> y n #> #> 1 16 3 #> 2 17 4 #> 3 18 5 #> 4 19 6 #> 5 20 7 #> 6 21 8 #> 7 22 9 #> 8 23 10 #> 9 24 11 #> 10 25 12"},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction-6","dir":"Articles","previous_headings":"7. Total-n mapper","what":"Introduction","title":"Consistency tests in depth","text":"reporting summary statistics often insufficient — certainly error detection point view. particular, values means standard deviations always accompanied respective group sizes, total sample size. presents problem consistency tests rely reported group sizes, GRIM. requires splitting reported total groups creating multiple plausible scenarios group sizes add total. Although definitive test results can gained way, help see whether reported values consistent least plausible group sizes (Bauer Francis 2021).","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"practical-steps-3","dir":"Articles","previous_headings":"7. Total-n mapper","what":"Practical steps","title":"Consistency tests in depth","text":"function_map_total_n() creates new functions follow scheme applying given consistency test multiple combinations reported hypothetical summary statistics. powerhouse behind grim_map_total_n(), grimmer_map_total_n(), debit_map_total_n(), just function_map_seq() powerhouse behind grim_map_seq(), grimmer_map_seq(), debit_map_seq(). See case study vignette(\"grim\") , section Handling unknown group sizes grim_map_total_n(), example grim_map_total_n() works practice. function_map_seq(), creating manufactured *_total_n() function easy. Just let function factory work : drive point home, let’s SCHLIM: pattern can applied basic mapper function fulfills requirements section 3. One columns, n, values dispersed half, internally using disperse_total(). See advice exporting manufactured functions end section 6.","code":"grim_map_total_n <- function_map_total_n( .fun = grim_map, .reported = \"x\", # don't include `n` here .name_test = \"GRIM\" ) grimmer_map_total_n <- function_map_total_n( .fun = grimmer_map, .reported = c(\"x\", \"sd\"), # don't include `n` here .name_test = \"GRIMMER\" ) debit_map_total_n <- function_map_total_n( .fun = debit_map, .reported = c(\"x\", \"sd\"), # don't include `n` here .name_test = \"DEBIT\" ) schlim_map_total_n <- function_map_total_n( .fun = schlim_map, .reported = \"y\", .name_test = \"SCHLIM\" ) # Example data: df_groups_schlim <- tibble::tribble( ~y1, ~y2, ~n, 84, 37, 29, 61, 55, 26 ) # Test dispersed sequences: out_total_n <- schlim_map_total_n(df_groups_schlim) out_total_n #> # A tibble: 48 × 7 #> y n n_change consistency both_consistent case dir #> #> 1 84 14 0 TRUE FALSE 1 forth #> 2 37 15 0 FALSE FALSE 1 forth #> 3 84 13 -1 TRUE FALSE 1 forth #> 4 37 16 1 FALSE FALSE 1 forth #> 5 84 12 -2 TRUE FALSE 1 forth #> 6 37 17 2 FALSE FALSE 1 forth #> 7 84 11 -3 TRUE FALSE 1 forth #> 8 37 18 3 FALSE FALSE 1 forth #> 9 84 10 -4 TRUE FALSE 1 forth #> 10 37 19 4 FALSE FALSE 1 forth #> # ℹ 38 more rows # Summarize: audit_total_n(out_total_n) #> # A tibble: 2 × 8 #> y1 y2 n hits_total hits_forth hits_back scenarios_total hit_rate #> #> 1 84 37 29 4 0 4 12 0.333 #> 2 61 55 26 12 6 6 12 1"},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"introduction-7","dir":"Articles","previous_headings":"8. Documenting audit_seq() and audit_total_n()","what":"Introduction","title":"Consistency tests in depth","text":"output sequence mappers total-n mappers comprehensive. makes somewhat unwieldy creates need summaries. first step, user can always call audit() tibbles returned manufactured functions like grim_map_seq(). go \"*_map\" class added within basic mapper function, grim_map(), return regular output respective audit() method. However, scrutiny features two specialized functions summarizing results manufactured *_seq() *_total_n() functions: audit_seq() audit_total_n(). two generic like audit(), accept output functions produced function_map_seq() function_map_total_n(), respectively. notice spoken two existing functions, rather — sections — kind function writing. Indeed, nothing left audit_seq() audit_total_n() , unless find bug ! , however, document behavior regard specific test implemented.","code":""},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"documentation-templates","dir":"Articles","previous_headings":"8. Documenting audit_seq() and audit_total_n()","what":"Documentation templates","title":"Consistency tests in depth","text":"audit_seq() audit_total_n() rely uniform design manufactured functions, allows compute essentially summaries: behavior varies names numbers key columns, turn follow straightforwardly nature consistency test. ’re developing package, therefore document behavior audit_seq() audit_total_n() pages manufactured *_map_seq() *_map_total_n() functions. specialized helpers creating respective documentation sections, write_doc_audit_seq() write_doc_audit_total_n(), analogy write_doc_audit(). used first one grim_map_seq(), grimmer_map_seq(), debit_map_seq(); output omitted save space: key_args string vector names respective test’s key arguments. (see function sensitive length key_args, just values.) name_test short, plain-text name consistency test . Copy output console paste roxygen2 block _map_seq function. preserve bullet-point structure indenting roxygen2 comments Ctrl+Shift+/, leave empty lines pasted output rest block. Likewise, documenting audit_total_n() grim_map_total_n(), grimmer_map_total_n(), debit_map_total_n(): develop, export, strange functions? Documenting one’s package glossed , value standardization, well. write_doc_audit_seq() write_doc_audit_total_n() deliver quality documentation little effort also establishing firm conventions .","code":"write_doc_audit_seq(key_args = c(\"x\", \"n\"), name_test = \"GRIM\") write_doc_audit_seq(key_args = c(\"x\", \"sd\", \"n\"), name_test = \"GRIMMER\") write_doc_audit_seq(key_args = c(\"x\", \"sd\", \"n\"), name_test = \"DEBIT\") write_doc_audit_total_n(key_args = c(\"x\", \"n\"), name_test = \"GRIM\") write_doc_audit_total_n(key_args = c(\"x\", \"sd\", \"n\"), name_test = \"GRIMMER\") write_doc_audit_total_n(key_args = c(\"x\", \"sd\", \"n\"), name_test = \"DEBIT\")"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-in-depth.html","id":"wrap-up","dir":"Articles","previous_headings":"","what":"Wrap-up","title":"Consistency tests in depth","text":"key part consistency tests compelling mathematical insight relationship summary statistics. rest implementation application. software package can generate new consistency tests yet, can make implementation application scale easy possible. scrutiny hopes . vignette generated five example functions (counting audit() method), four via function factories. Three factories part scrutiny’s infrastructure. Starting simple mock test, entire family functions sprang apply test special cases, unified API, scale — just lines easy write code. function family tree. Fields bold margins function factories. Arrows passing indicate new function generated basis earlier one. overview scrutiny’s function factories: Predicate functions return TRUE data frames returned factory-made functions. general is_map_df() returns TRUE data frames. explained section 3, grim_map() written “hand” rather produced function_map(), factory-made function equivalent except additional columns output.","code":""},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-simple.html","id":"single-case","dir":"Articles","previous_headings":"","what":"1. Single-case","title":"Implementing your consistency test","text":"Encode logic test simple function takes single values. return TRUE consistent FALSE . name end _scalar, refers single-case nature. , use mock test without real meaning, called SCHLIM:","code":"schlim_scalar <- function(y, n) { y <- as.numeric(y) n <- as.numeric(n) all(y / 3 > n) } schlim_scalar(y = 30, n = 4) #> [1] TRUE schlim_scalar(y = 2, n = 7) #> [1] FALSE"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-simple.html","id":"vectorized","dir":"Articles","previous_headings":"","what":"2. Vectorized","title":"Implementing your consistency test","text":"completeness, although ’s important practice — Vectorize() base R helps turn single-case function vectorized one, new function’s arguments can length greater 1:","code":"schlim <- Vectorize(schlim_scalar) schlim(y = 10:15, n = 4) #> [1] FALSE FALSE FALSE TRUE TRUE TRUE"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-simple.html","id":"basic-mapper","dir":"Articles","previous_headings":"","what":"3. Basic mapper","title":"Implementing your consistency test","text":"Next, create function tests many values data frame, like grim_map() . name also end _map. Use function_map() get function without much effort:","code":"schlim_map <- function_map( .fun = schlim_scalar, .reported = c(\"y\", \"n\"), .name_test = \"SCHLIM\" ) # Example data: df1 <- tibble::tibble(y = 16:25, n = 3:12) schlim_map(df1) #> # A tibble: 10 × 3 #> y n consistency #> #> 1 16 3 TRUE #> 2 17 4 TRUE #> 3 18 5 TRUE #> 4 19 6 TRUE #> 5 20 7 FALSE #> 6 21 8 FALSE #> 7 22 9 FALSE #> 8 23 10 FALSE #> 9 24 11 FALSE #> 10 25 12 FALSE"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-simple.html","id":"audit-method","dir":"Articles","previous_headings":"","what":"4. audit() method","title":"Implementing your consistency test","text":"Use scrutiny’s audit() generic get summary statistics. Write new function named audit.scr_name_map(), name name test lower-case — , schlim. Within function body, call audit_cols_minimal(). enables use audit() following mapper function: audit_cols_minimal() provides basic summaries. like, can still add summary statistics specific test. See, e.g., Summaries audit() section grim_map()’s documentation.","code":"audit.scr_schlim_map <- function(data) { audit_cols_minimal(data, name_test = \"SCHLIM\") } df1 %>% schlim_map() %>% audit() #> # A tibble: 1 × 3 #> incons_cases all_cases incons_rate #> #> 1 6 10 0.6"},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-simple.html","id":"sequence-mapper","dir":"Articles","previous_headings":"","what":"5. Sequence mapper","title":"Implementing your consistency test","text":"kind mapper function tests hypothetical values around reported ones, like grim_map_seq() . Create sequence mapper simply calling function_map_seq(): Get summary statistics audit_seq():","code":"schlim_map_seq <- function_map_seq( .fun = schlim_map, .reported = c(\"y\", \"n\"), .name_test = \"SCHLIM\" ) df1 %>% schlim_map_seq() #> # A tibble: 120 × 6 #> y n consistency diff_var case var #> #> 1 15 7 FALSE -5 1 y #> 2 16 7 FALSE -4 1 y #> 3 17 7 FALSE -3 1 y #> 4 18 7 FALSE -2 1 y #> 5 19 7 FALSE -1 1 y #> 6 21 7 FALSE 1 1 y #> 7 22 7 TRUE 2 1 y #> 8 23 7 TRUE 3 1 y #> 9 24 7 TRUE 4 1 y #> 10 25 7 TRUE 5 1 y #> # ℹ 110 more rows df1 %>% schlim_map_seq() %>% audit_seq() #> # A tibble: 6 × 12 #> y n consistency hits_total hits_y hits_n diff_y diff_y_up diff_y_down #> #> 1 20 7 FALSE 9 4 5 2 2 NA #> 2 21 8 FALSE 6 2 4 4 4 NA #> 3 22 9 FALSE 4 0 4 NA NA NA #> 4 23 10 FALSE 3 0 3 NA NA NA #> 5 24 11 FALSE 2 0 2 NA NA NA #> 6 25 12 FALSE 2 0 2 NA NA NA #> # ℹ 3 more variables: diff_n , diff_n_up , diff_n_down "},{"path":"https://lhdjung.github.io/scrutiny/articles/consistency-tests-simple.html","id":"total-n-mapper","dir":"Articles","previous_headings":"","what":"6. Total-n mapper","title":"Implementing your consistency test","text":"Suppose grouped data group sizes known, total sample size: tackle , create total-n mapper varies hypothetical group sizes: Get summary statistics audit_total_n():","code":"df2 <- tibble::tribble( ~y1, ~y2, ~n, 84, 37, 29, 61, 55, 26 ) schlim_map_total_n <- function_map_total_n( .fun = schlim_map, .reported = \"y\", .name_test = \"SCHLIM\" ) df2 %>% schlim_map_total_n() #> # A tibble: 48 × 7 #> y n n_change consistency both_consistent case dir #> #> 1 84 14 0 TRUE FALSE 1 forth #> 2 37 15 0 FALSE FALSE 1 forth #> 3 84 13 -1 TRUE FALSE 1 forth #> 4 37 16 1 FALSE FALSE 1 forth #> 5 84 12 -2 TRUE FALSE 1 forth #> 6 37 17 2 FALSE FALSE 1 forth #> 7 84 11 -3 TRUE FALSE 1 forth #> 8 37 18 3 FALSE FALSE 1 forth #> 9 84 10 -4 TRUE FALSE 1 forth #> 10 37 19 4 FALSE FALSE 1 forth #> # ℹ 38 more rows df2 %>% schlim_map_total_n() %>% audit_total_n() #> # A tibble: 2 × 8 #> y1 y2 n hits_total hits_forth hits_back scenarios_total hit_rate #> #> 1 84 37 29 4 0 4 12 0.333 #> 2 61 55 26 12 6 6 12 1"},{"path":"https://lhdjung.github.io/scrutiny/articles/debit.html","id":"debit-basics","dir":"Articles","previous_headings":"","what":"DEBIT basics","title":"DEBIT","text":"Consider summary data binary distribution: mean 0.35, SD 0.18, sample size 20. test consistency, run : grim(), mean needs string. (true SD.) strings preserve trailing zeros, can crucial DEBIT. Numeric values don’t, even converting strings won’t help. workaround larger numbers values, restore_zeros(), discussed Data wrangling vignette. debit() arguments, can used within debit_map(). Since debit_map() useful function practice, arguments discussed context.","code":"debit(x = \"0.35\", sd = \"0.18\", n = 20) #> 0.35 #> FALSE"},{"path":[]},{"path":"https://lhdjung.github.io/scrutiny/articles/debit.html","id":"working-with-debit_map","dir":"Articles","previous_headings":"Testing multiple cases","what":"Working with debit_map()","title":"DEBIT","text":"want test handful cases, recommended way enter data frame run debit_map() data frame. example data Heathers Brown’s (2019) Table 1. useful way enter data copy PDF file paste tibble::tribble(), available via scrutiny: Now, simply run debit_map() data frame: x, sd, n columns input. main result, consistency, DEBIT consistency former three columns. DEBIT makes sense binary means SDs. debit() debit_map() check inputs data, fail : Compared grim_map(), debit_map() straightforward. percentage conversion accounting multiple scale items. true comparing basic grim() debit() functions. However, implementations tap scrutiny’s arsenal rounding procedures, discussed next.","code":"flying_pigs <- tibble::tibble( x = runif(5, 0.2, 1) %>% round(2) %>% restore_zeros(), sd = runif(5, 0, 0.3) %>% round(2) %>% restore_zeros(), n = 1000 ) flying_pigs #> # A tibble: 5 × 3 #> x sd n #> #> 1 0.52 0.03 1000 #> 2 0.88 0.15 1000 #> 3 0.57 0.02 1000 #> 4 0.99 0.24 1000 #> 5 0.47 0.26 1000 flying_pigs %>% debit_map() #> # A tibble: 5 × 11 #> x sd n consistency rounding sd_lower sd_incl_lower sd_upper #> #> 1 0.52 0.03 1000 FALSE up_or_down 0.025 TRUE 0.035 #> 2 0.88 0.15 1000 FALSE up_or_down 0.145 TRUE 0.155 #> 3 0.57 0.02 1000 FALSE up_or_down 0.015 TRUE 0.025 #> 4 0.99 0.24 1000 FALSE up_or_down 0.235 TRUE 0.245 #> 5 0.47 0.26 1000 FALSE up_or_down 0.255 TRUE 0.265 #> # ℹ 3 more variables: sd_incl_upper , x_lower , x_upper pigs3 # data saved within the package #> # A tibble: 7 × 3 #> x sd n #> #> 1 0.53 0.50 1683 #> 2 0.44 0.50 1683 #> 3 0.77 0.42 1683 #> 4 0.19 0.35 1683 #> 5 0.34 0.47 1683 #> 6 0.93 0.25 1683 #> 7 0.12 0.33 1683 pigs3 %>% debit_map() #> # A tibble: 7 × 11 #> x sd n consistency rounding sd_lower sd_incl_lower sd_upper #> #> 1 0.53 0.50 1683 TRUE up_or_down 0.495 TRUE 0.505 #> 2 0.44 0.50 1683 TRUE up_or_down 0.495 TRUE 0.505 #> 3 0.77 0.42 1683 TRUE up_or_down 0.415 TRUE 0.425 #> 4 0.19 0.35 1683 FALSE up_or_down 0.345 TRUE 0.355 #> 5 0.34 0.47 1683 TRUE up_or_down 0.465 TRUE 0.475 #> 6 0.93 0.25 1683 TRUE up_or_down 0.245 TRUE 0.255 #> 7 0.12 0.33 1683 TRUE up_or_down 0.325 TRUE 0.335 #> # ℹ 3 more variables: sd_incl_upper , x_lower , x_upper pigs5 # no binary means / SDs! #> # A tibble: 12 × 3 #> x sd n #> #> 1 7.22 5.30 38 #> 2 4.74 6.55 31 #> 3 5.23 2.55 35 #> 4 2.57 2.57 30 #> 5 6.77 2.18 33 #> 6 2.68 2.59 34 #> 7 7.01 6.68 35 #> 8 7.38 3.65 32 #> 9 3.14 5.32 33 #> 10 6.89 4.18 37 #> 11 5.00 2.18 31 #> 12 0.24 6.43 34 pigs5 %>% debit_map() #> Error in `check_debit_inputs()`: #> ! DEBIT only works with binary summary data. #> ! Binary mean (`x`) values must range from 0 to 1. #> ✖ 11 out of 12 `x` values are not in that range, starting with 7.22, 4.74, and #> 5.23."},{"path":"https://lhdjung.github.io/scrutiny/articles/debit.html","id":"rounding","dir":"Articles","previous_headings":"Testing multiple cases","what":"Rounding","title":"DEBIT","text":"scrutiny package provides infrastructure reconstructing rounded numbers. can commanded within debit() debit_map(). Several arguments allow stating precise way original numbers supposedly rounded. First foremost rounding argument. takes string rounding procedure’s name, leads number rounded either ways: Rounded \"\" \"\" 5. Note SAS, SPSS, Stata, Matlab, Excel round \"\" 5, whereas Python rounds \"\" 5. Rounded \"even\" using base R’s round(). Rounded \"up_from\" \"down_from\" number, needs specified via threshold argument. Given \"ceiling\" \"floor\" respective decimal place. Rounded towards zero \"trunc\" away zero \"anti_trunc\". default, \"up_or_down\", allows numbers rounded either \"\" \"\" 5 using DEBIT; likewise \"up_from_or_down_from\" \"ceiling_or_floor\". procedures, see documentation round(), round_up(), round_ceiling(). include ways rounding. Points 3 5 list quite obscure options included cover wide spectrum possible rounding procedures. true threshold symmetric arguments, aren’t discussed . default, debit() debit_map() accept values rounded either 5. reason impose stricter assumptions way x rounded, specify rounding accordingly: Although changing rounding procedure didn’t make difference DEBIT consistency , important account different ways numbers might rounded, demonstrate given results robust variable decisions. err side caution, default rounding permissive \"up_or_down\".","code":"pigs3 %>% debit_map(rounding = \"up\") #> # A tibble: 7 × 11 #> x sd n consistency rounding sd_lower sd_incl_lower sd_upper #> #> 1 0.53 0.50 1683 TRUE up 0.495 TRUE 0.505 #> 2 0.44 0.50 1683 TRUE up 0.495 TRUE 0.505 #> 3 0.77 0.42 1683 TRUE up 0.415 TRUE 0.425 #> 4 0.19 0.35 1683 FALSE up 0.345 TRUE 0.355 #> 5 0.34 0.47 1683 TRUE up 0.465 TRUE 0.475 #> 6 0.93 0.25 1683 TRUE up 0.245 TRUE 0.255 #> 7 0.12 0.33 1683 TRUE up 0.325 TRUE 0.335 #> # ℹ 3 more variables: sd_incl_upper , x_lower , x_upper pigs3 %>% debit_map(rounding = \"even\") #> # A tibble: 7 × 11 #> x sd n consistency rounding sd_lower sd_incl_lower sd_upper #>