read_clipboard()
and write_clipboard()
now use {clipr}
to work on non-Windows platforms #125read_clipboard()
now works with more methods for reading data.frame
sread_clipboard()
now defaults to a tibble
return when {tibble}
is availablewrite_file_md5()
now supports "feather"
and "parquet"
methods as wrappers for {arrow}
#234md5()
added to provide MD5 check sums for objects #233unique_rows()
added to subset on (non-)duplicated rows in a data.frame
#87within()
added as an alternative to between_more()
#120echo()
is now removed; use echo::echo()
instead #214tryn()
for running an expression a maximum number of times before failure #80unlist0()
no longer fails when input list is not named #220match_param()
has been improved
file_copy_md5()
added as a wrapper for fs::file_copy()
but provides MD5 checks through tools::md5sum()
to avoid overwriting files that had no content changes #207write_file_md5()
added as a general writing function and utilizes file_copy_md5()
for MD5 checks (including some compression options) #207, #224merge_list()
added for combining lists #200glob()
added for basic wildcard globbing on character vectors #167{fs}
over base file functions #160todos()
and fixmes()
rlang::list2()
for internally #199%::%
and %:::%
now exported from {fuj}
data.frame
. Blank values are those which do not contain any text (controls for NA
) or are entirely white space.
is_blank()
for detecting blank values in a vectoris_blank_cols()
for detecting blank columnsselect_blank_cols()
for selecting blank columnsremove_blank_cols()
for removing blank columnsmatch_param()
now accepts a named listed for alias matching #104echo()
evaluates expressions and logs outputs #164{fuj}
is now imported
{fuj}
(see ?mark::reexports
)set_names0()
is deprecated in favor of set_names()
fuj::new_condition()
;date_from_partial()
works again #155 after fixing an issue with an internal utility is_valid_date_string()
that wasn't recognizing %Y-%m-%d
(and potentially others)lintr
GitHub action updated #173; this includes plenty of internal improvements and code cleanup{pkgdown}
action #175switch_in_case()
handles NA
s better #183switch
tests updated for {waldo}
development #182 thanks, @hadley
write_clipboard()
are now displayed in documentation #186normalize()
added to normalize values in vectors
, matrices
, and data.frame
s by specified ranges and boundaries #143get_labels()
and other label related functions now get exact matches for "label"
attributes #141recode_only()
, and recode_by()
now accept a named list()
for by
#96]switch_in_case()
now handles functions in the right hand statementsupdate_version()
now correctly checks result of embedded utils::menu()
call for updating the version #123require_namespace()
now accepts multiple namespaces #121unique.fact()
S3 method #86recode_only()
and recode_by()
can accept a single value for val
#73fact_reverse()
for reversing fact
levels #78as.Date.fact()
added #108as.character.fact()
added[.fact
addedread_bib()
better handles fields where =
is present in the text #117fact.haven_labelled()
works properly and retains the label
attribute #136drop_levels()
is exported #105recode_by()
and recode_only()
handle factors better #81shell.exec()
now try to determine the appropriate method of opening a file base on OS. #126"%Z"
in the date format #147reverse()
has been removed (use flip()
instead)assign_label()
has been removed (use assign_labels()
instead)percentile_rank(times)
is deprecated in favor of percent_rank(weights)
print.fact()
rewritten as a slightly modified print.factor()
#109percentile_rank()
improvements #131The package website https://jmbarbone.github.io/mark/ is now available! More references and vignettes will make their way here in future releases.
detail(NA)
(or when x
has only NA
values) no longer throws a warning and returns NA
for min_c
, max_c
#59print.noted()
now passes ...
to next methods #67assign_label()
#74
assign_label()
will be removed in 0.4.2
set_not_available()
now seems to work correctly -- it probably hasn't actually be working most of the timepercentile_rank()
is now more correct when x
is a decimal by checking for unique values first #92counts.data.frame()
now handle factor columns better?handlers
, all allow for additional params passed through ...
#34row_bind()
to bind a list of data.frames()
#46drop_levels()
with factor
and data.frame
methods; functions similarly to base::droplevels()
but is a little faster #54todos()
and fixmes()
gain a new param force
TRUE
, forces searches for .R
files when the given directory does not contain an .Rproj
fileFALSE
, prevents long start ups when these functions are called in a .Rprofile
file and R is not launches in a project directorymark.todos.force
set_note()
, a wrapper for note<-()
#77fact2char()
to compliment char2fact()
#75print.pseudo_id()
now truncates long uniques to a single line #70match_param(NULL, null = TRUE)
allows param
to safely return NULL
#89fact_na()
is added to use fact
vectors with NA
levels that work with is.na()
#69 and other NA
handling improvementsprint._mark_bib_df()
method to supporting printing listsfacts
: as.integer.fact()
, as.double.fact()
, remove_na.fact()
fact.numeric()
now treats NaN
the same as NA
, no extra level/unique value is retainedread_clipboard()
now returns NA
when the clipboard is empty, rather than ""
(improvements with internal type conversions)NA
handling as wellutils::type.convert()
with some additional functionality for logical (e.g., character string using "true"
and "false"
) and for guessing dates in a YYYY-MM-DD
formatdetails(factor)
no longer adds fact
class to factors
#50details()
gains new argument factor_n
to control threshold for making character vectors into factorsdetail.data.frame()
now works with single column data.frames #48paste_combine()
no longer duplicated the second vector of ...
when length(...) > 2
#52percentile_rank()
to calculate percentile ranks with a vectorinsert()
to insert multiple values into a vectorpseudo_id()
gains argument na_last
to change positioning of NA
valuesis_true()
and is_false()
are now exported as generics with methods for default
and logical
omit_na()
for tracking positions of NA
and non-NA
valuesquick_df(NULL)
now returns an empty data.frame
quick_dfl()
exported as a wrapper for quick_df(list(...))
squash_vec()
now works correctly when values are not ordered #43as_ordered()
no longer duplicates ordered
class #44counts.data.frame()
and props.data.frame()
correctly make column names uniquetry_numeric()
correctly handles NA
sflip.matrix(, keep_rownames = FALSE)
now works correctlyany_match()
now works as expectedlines_of_r_code()
now works correctly reading a single fileimport(, overwrite = TRUE)
now worksls_function()
, ls_object()
, ls_dataframe()
, and ls_all()
have improvements for environmental searchingassign_labels.data.frame(.missing = "warning")
correctly removes missing columnsremove_na.factor()
no long drops additional classes other than ordered
and factor
struct()
overwriting attributes improved and examplesfact.haven_labelled()
now returns an object with class fact
#39; performance enhancementsset_names0(NULL)
no longer causes an error and returns NULL
#40diff_time()
correctly handles time zones when x
is Date
and y
is POSIXt
#41list_files()
) to try to not search every file depending on desired searches (e.g., by full file paths or just base names)as_ordered()
handles factors
better; S3 methods removed: as_ordered.ordered()
, as_ordered.factor()
remove_na()
has better performance when x
has no NA
valuescounts.data.frame()
and props.data.frame()
retain attributes of selected columnstodos()
and fixmes()
will not search for .R
or .Rmd
files if the path
is not changed from ""
and no .Rproj
is found within the directoryunlist0()
to retain original names of lists%names%
for a fun way to set namesfile_open()
as alias for open_file()
detail()
to return a data.frame
of details for a vector of columns of a data.frame
squash_vec()
to combined the names of a vector with repeated valuesmake_sf()
as a simple wrapper for package specific system.file()
add_file_timestampe()
gains a new parameter sep
to separate the file name (sans ext) and the time stampassign_labels.data.frame()
gains new argument .ls
to explicitly set a list
(or data.frame
) of columnsprops()
and family gain argument na.rm
to not count NA
values for proportionspackage_available()
now visibly returns TRUE
/FALSE
remove_na()
now has methods for list
s and factor
senvironments()
now has it's own print.mark_environments()
method rather than calling cat()
within the function itselfarray_extract()
's first argument is changed from arr
to .arr
diff_time()
now defaults to using UTC (Related to #32)print.note()
method has been updated (Related to: #33):
x
normally, without the note class
when just the note has to be seennoted
fact()
fact()
now returns a vector with a fact
elementfact.character()
correctly labels NA
s #24fact.factor()
not longer simply returns x
but rather updates the levels and integer values to confirm with other fact()
methods. fact.factor()
will retain all levels of the original value, reorder the levels, and append NA
if necessaryfact.fact()
added to return a correctly formatted fact()
fact.logical()
now orders levels as TRUE
then FALSE
, and NA
if presentfact.Date()
and fact.POSIXt()
added, which simply call fact.numeric()
print.fact()
method added to print a fact
vector as a factor
as_ordered.factor()
and as_ordered.ordered()
now call fact()
to check levelsis.vector()
directly; arguments passed with attributes that when removed fulfill is.vector()
are acceptedtodos()
and fixmes()
now correctly show tags for .Rmd
fileslimit()
sort
argument to props()
pseudo_id.factor()
no longer returns NA_integer
when a value is NA
or a level is NA
and correctly resets the order of the levels from the factor to their order of appearanceflip.data.frame()
no longer coerces single column data.frames #36fact.pseudo_id()
and pseudo_id.pseudo_id()
methods addedas_ordered()
to quickly create ordered
factors using fact()
char2fact()
to convert character
vectors (or columns in a data.frame
) to factors
based on the number unique valuestableNA()
to make a table from NA
valuesround_by()
gains an additional argument include0
which if FALSE
will replace 0
values with by
assign_labels.data.frame()
gains an additional argument .missing
to set how to control for missing labels: you can now use a warning
for a missing label (instead of an error) or silently ignore any missing labelssort_names()
gains a new argument numeric
to try to sort names of x
by their numeric value #26struct()
, a simplified version of struct()
fact()
methods
todos()
and fixmes()
gain an additional argument path
to specify a directory or file to search within #25print.pseudo_id()
added for a cleaner printbetween_more()
accepts vectors for left
and right
paramsNew name!
The previous name jordan
was conflicting with recent package on CRAN.
...
in todos()
#8
grep()
also now evaluated with cleaned todo texttodos()
in Rmd files, too#
and spaces in lines (e.g., # # TODO text
-> text
)counts()
NA
counting in counts()
; NA
counts are now appended at the end whether or not sort is calledcounts()
base::rle()
now use a combination of pseudo_id()
and base::tabulate()
multi_grepl()
internal functions to prevent conflicts with R 4.1.0
vector2df()
when passed a listfact()
and pseudo_id()
fixmes()
#13names_switch()
to switch names and valuesvector2df()
can now output a 1 column data.frame if name = NULL
invert
parameter to complete_cases()
to filter for incomplete casesare_identical()
for comparing 2 or more vectors as identical()
, element-wiseadd_file_timestamp()
diff_time()
and related functions will try to convert y
to a Date
object if x
is passed as date (e.g., diff_time_days(Sys.Date(), "2021-06-03")
will not show decimals)stringsAsFactors
option in quick_df()
note
jordan.note.fun
option for printing -- this was too complicated and doesn't seem to work too well without too many adjustmentsnote<-
now appends the class noted
to the object so that a print.noted
method is dispatched so the note will be printed when calledprint.note
note defaults to a colorful message called with cat()
jordanExtra
; these were a bit wild, dynamic, and not well tested. The .Rprofile template also exists in the separate package.match_param()
now reports the value passed to param
on failurehas_message()
and get_message()
catch()
for catching errors, messages, and warningshas_*()
now returns the result in the result
attributeprint.has_catch()
will hide attributes in printtodos()
grep()
todos_df
for viewing taskstodos()
still has class data.frame
but will now also have class todos_df
print.todos_df()
method should be make more sense for task managementstr_slice_by_word()
no longer has a leading " "
for each element after the first (this was not the intention of the split)is_file()
and is_dir()
now returns and error when passed NULL
or a vector of length 0switch_params()
now accepts a vector for x
...
examples updatedcounts.data.frame()
and props.data.frame()
print()
method called from todos()
has a new format to group together multiple items found in a single fileprint_c()
to print a vector into a c()
"string"diff_time
functions
diff_time()
along with shortcuts for specific methods: diff_time_secs()
, diff_time_days()
, diff_time_years()
, and others (see ?jordan::diff_time
)base::difftime()
but...
diff_time
and numeric
tza
and tzb
parameters)sort_by()
NA
assignments:
NA_at()
for position assignmentsNA_if()
for logical/conditional assignmentsNA_in()
for inclusive matching assignmentsNA_out()
for exclusive matching assignmentsrscript()
, save_source()
, and source_to_env()
)switch_case()
to return a values based on a left hand statement
returning TRUE
and switch_in_case()
for evaluating x
%in%
left hand side
dplyr::case_when()
but for specific casescheckOptions()
recode_by()
and recode_only()
for a simple implementations of recoding elements in a vectorfizzbuzz()
quick_df()
to turn a list into a data.frame (used internally, too)complete_cases()
to select rows without NA
valuesshow_NA
parameter from vector2df()
and list2df()
make.unique()
is utilized for empty name named to retain the position of the list elementls_object()
to list all is.object()
sls_dataframe()
to list all is.data.frame()
sls_function()
to list all is.function()
scounts()
and props()
for counting unique elements in vectors and data.framesSome exported functions and names have been changed to prevent conflicts with other popular packages
%||%
is no longer exported; it is exported in rlang
(and reexported in purrr
) and is a relatively simply function anywaycollapse()
is now collapse0()
to avoid conflicts with glue
; although glue::collapse()
is meant to be deprecated, collapse0()
is mostly a wrapper for paste0()
, so this may be a better nameset_names()
is now set_names0()
to avoid conflicts with rlang
(reexported from purrr
) and magrittr
do_paste_combine()
(used inside paste_combine()
) simplified to remove use of outer()
get_version()
to retrieve the current package version (assuming you're in the directory)utils::menu()
is called to confirm that version should be updatedbump_version()
or by date bump_date_version()
)string_extract()
function inside str_extract_date()
and str_extract_datettime()
Major cleanup for documenting, reviewing, removing, relocating, and testing functions.
NEWS.md
file to track changes to the packagemuffle()
and wuffle()
)limit()
match_param()
now returns correct errors messages for callswrite_clipboard()
formats vectors as charactersread_clipboard()
tries to correctly format vectors and data.framesstr_close_enough()
because this didn't make much sense anyway%colons%
: A substitute for ::
and :::
%||%
: Virtually identical to rlang's version.CharacterIndex()
: Quick visual of indexes in character stringsbump_date_version
: Updated DESCRIPTION versions that are saved as dateschr_split()
: Essentially an alias for strsplit(., "")[[1]]
get_error()
, get_warning()
, has_error()
, has_warning()
, muffle()
and wuffle()
(aliases for suppressMessages()
and suppressWarnings()
)is_dir()
, is_file()
, list_dirs()
is_na_cols()
: previously not exported, inside select_na_cols()
and remove_na_cols()
limit()
: Limits a numeric vector by an upper and lower boundmatch_param()
: Alternative to match.arg()
without partial matching and more detailed error messageouter_call()
, outer_fun()
, within_call()
, within_fun()
quiet_stop()
: calls stop()
without throwing an errorset_names()
, remove_names()
require_namespace()
: Mostly a wrapper for require()
with a more detailed error messagevap_*()
: Wrappers for vapply()
, must like purrr's map_*Some miscellaneous, less controlled functions have been moved to jordanExtra.
set_rust_engine()
, engine_rust()
add_data_sheet()
, add_image_sheet()
pROC_optimal_threshold()
, pROC_quick_plot()
cohen2odds()
, cohend2r()
, odds_ratio()
, odds2d()
, odds2r()
, r2cohend()
fishers_method()
, iqrs()
, p_round()
, p_value_sig()
, percentile_rank()
, proportion()
, sd_pooled()
, sterr()
, tukey_coef()
, z_score()
add_euclidean()
, add_malahanobis()
, %=+
, filter_combine()
, reverse_log_trans()
,