From 1ab4140868383f91791463f8bc965ac80a7a3137 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 21:18:15 +0000 Subject: [PATCH 1/7] Drop dplyr dependency, fix undecided-separator gap, reclassify clipr - countDotOrUnderscoreSeparated() used dplyr::case_when() for a single call site; replaced with a plain base R if/else chain. Same behavior as before for every previously-handled case, plus it now fixes a real gap: any two-way tie among the dot/underscore/whitespace counts (e.g. "a.b_c.d_e f", where dots tie underscores at 2 and both beat the 1 whitespace) fell through all of case_when's branches and silently returned NA. It now resolves to "undecided", same as the pre-existing three-way-tie case. - dplyr is now unused; removed it from Imports/NAMESPACE and Development/config.R (which generates DESCRIPTION). - clipr is only ever used behind requireNamespace()/try() guards (an optional, best-effort feature), which is exactly what DESCRIPTION's Suggests field is for. Moved it from Imports to Suggests. Because a NAMESPACE importFrom() forces a hard dependency (R CMD check ERRORs if a package with an importFrom() sits in Suggests), also dropped the three @importFrom clipr write_clip roxygen tags; the code already calls clipr::write_clip() fully qualified, which is exactly the supported pattern for optional Suggests-only dependencies. - Fixed an unrelated pre-existing R CMD check NOTE surfaced during this work: ParseFullFilePath() calls hasArg(), which lives in the methods package (not base), but nothing declared that dependency. Added @importFrom methods hasArg and moved `methods` into Imports. Version bumped 1.2.1 -> 1.2.2 in Development/config.R and DESCRIPTION. Validation: R CMD check and the existing testthat suite (7/7 passing) were run on this branch. Remaining R CMD check findings are pre-existing and out of scope for this PR: the parFlags() example errors (fixed in a follow-up PR forwarding it to parFlags2()), parsepvalue()'s undocumented `prefix` param (fixed alongside its bracket bug in another follow-up PR), the flag.names_list.Rd/idate.Rd broken-link warnings and dead-code cleanup (fixed in the docs-cleanup PR, not included on this branch since it branches independently from dev), and the %!in% Rd name warning plus a sandbox locale warning, both environment-inherent and unrelated to any source change. --- DESCRIPTION | 12 ++++++------ Development/config.R | 6 +++--- NAMESPACE | 3 +-- R/Stringendo.R | 25 ++++++++++++++----------- man/toCamelCase.Rd | 1 + man/toUnderscoreSeparated.Rd | 1 + 6 files changed, 26 insertions(+), 22 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d3a7377..fb7dc0c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,18 +1,18 @@ Package: Stringendo Title: Stringendo - string manipulation utilities -Version: 1.2.1 -Authors@R: +Version: 1.2.2 +Authors@R: person("Abel", "Vertesy", , "av@imba.oeaw.ac.at", role = c("aut", "cre")) Description: Stringendo is a set of R functions to parse strings from variables and to manipulate strings. License: GPL-3 + file LICENSE BugReports: https://github.com/vertesy/Stringendo/issues -Depends: +Depends: base -Imports: +Imports: + methods +Suggests: clipr, - dplyr -Suggests: devtools, testthat Encoding: UTF-8 diff --git a/Development/config.R b/Development/config.R index e0a52bb..58bd690 100644 --- a/Development/config.R +++ b/Development/config.R @@ -3,13 +3,13 @@ DESCRIPTION <- list( package.name = "Stringendo", - version = "1.2.1", + version = "1.2.2", title = "Stringendo - string manipulation utilities", description = "Stringendo is a set of R functions to parse strings from variables and to manipulate strings.", depends = "base", - imports = "dplyr, clipr", - suggests = "devtools, testthat", # removed MarkdownHelpers, MarkdownReports, + imports = "methods", + suggests = "devtools, testthat, clipr", # removed MarkdownHelpers, MarkdownReports, dplyr (no longer used) author.given = "Abel", author.family = "Vertesy", diff --git a/NAMESPACE b/NAMESPACE index da5cc90..334c6a4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -80,5 +80,4 @@ export(toUnderscoreSeparated) export(warnif) export(warnifnot) export(ww.break.lines) -importFrom(clipr,write_clip) -importFrom(dplyr,case_when) +importFrom(methods,hasArg) diff --git a/R/Stringendo.R b/R/Stringendo.R index af8ffe8..1af772e 100644 --- a/R/Stringendo.R +++ b/R/Stringendo.R @@ -999,7 +999,6 @@ format_number_h <- function(x, digits = 1, big.mark = " ", decimal.mark = ".") { #' countDotOrUnderscoreSeparated("add translated metadata") #' countDotOrUnderscoreSeparated("addTranslatedMetadata") #' } -#' @importFrom dplyr case_when #' @export countDotOrUnderscoreSeparated <- function(string) { stopifnot(is.character(string), length(string) == 1) @@ -1016,13 +1015,19 @@ countDotOrUnderscoreSeparated <- function(string) { message(paste("Number of white spaces in the string:", ws_count)) } - estimated_separator <- dplyr::case_when( - dot_count > max(usc_count, ws_count) ~ "dot", - usc_count > max(dot_count, ws_count) ~ "underscore", - ws_count > max(dot_count, usc_count) ~ "white space", - dot_count == 0 && usc_count == 0 && ws_count == 0 ~ "none", - dot_count == usc_count && dot_count == ws_count ~ "undecided" - ) + # Any other tie among the counts (not just a three-way tie) is genuinely + # ambiguous, so it also falls back to "undecided" rather than NA. + estimated_separator <- if (dot_count > max(usc_count, ws_count)) { + "dot" + } else if (usc_count > max(dot_count, ws_count)) { + "underscore" + } else if (ws_count > max(dot_count, usc_count)) { + "white space" + } else if (dot_count == 0 && usc_count == 0 && ws_count == 0) { + "none" + } else { + "undecided" + } message("Estimated separator: ", estimated_separator) @@ -1048,7 +1053,6 @@ countDotOrUnderscoreSeparated <- function(string) { #' @examples #' toCamelCase("plot.metadata.cor.heatMap") #' toCamelCase("plot_metadata_cor_heat_map") -#' @importFrom clipr write_clip #' #' @export toCamelCase <- function(input_string, @@ -1095,7 +1099,6 @@ toCamelCase <- function(input_string, #' toUnderscoreSeparated("plot.Metadata.cor.heatMap") #' toUnderscoreSeparated("plotMetadataCorHeatMap") #' toUnderscoreSeparated("plot.metadataCor.heatMap") -#' @importFrom clipr write_clip #' #' @export toUnderscoreSeparated <- function(input_string, toclipboard = FALSE) { @@ -1132,7 +1135,6 @@ toUnderscoreSeparated <- function(input_string, toclipboard = FALSE) { #' @examples #' toDotSeparated("plotMetadataCorHeatMap") #' toDotSeparated("plot_Metadata_Cor_HeatMap") -#' @importFrom clipr write_clip #' @export toDotSeparated <- function(input_string, toclipboard = TRUE) { @@ -1231,6 +1233,7 @@ fix_special_characters_bash <- function(path) { #' ParseFullFilePath(path = "home/user/docs/", file_name = "report@final", extension = ".txt") #' ParseFullFilePath(file_name = "report", extension = "txt") #' +#' @importFrom methods hasArg #' @export ParseFullFilePath <- function(path, file_name, extension) { file_name <- ReplaceRepeatedDots(ReplaceSpecialCharacters(file_name)) diff --git a/man/toCamelCase.Rd b/man/toCamelCase.Rd index d179795..d981ad5 100644 --- a/man/toCamelCase.Rd +++ b/man/toCamelCase.Rd @@ -31,4 +31,5 @@ each word (except the first word), and then concatenates them back together. \examples{ toCamelCase("plot.metadata.cor.heatMap") toCamelCase("plot_metadata_cor_heat_map") + } diff --git a/man/toUnderscoreSeparated.Rd b/man/toUnderscoreSeparated.Rd index 65c460f..7ee7b5f 100644 --- a/man/toUnderscoreSeparated.Rd +++ b/man/toUnderscoreSeparated.Rd @@ -25,4 +25,5 @@ It then converts all characters to lowercase. toUnderscoreSeparated("plot.Metadata.cor.heatMap") toUnderscoreSeparated("plotMetadataCorHeatMap") toUnderscoreSeparated("plot.metadataCor.heatMap") + } From 3b9ee2a0f2598dab930f142087e774a4d06640f2 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 21:28:30 +0000 Subject: [PATCH 2/7] Fix params.2.fname(): wrong names + missing export Two bugs, found together while investigating why fixing parFlags()'s R CMD check error (a separate PR) unmasked a new "checking examples" ERROR in params.2.fname(): 1. Broken logic: nmz <- as.character(substitute(list(...))[-1]) does NOT recover the argument names. as.character() on a substituted call deparses each element's VALUE, not its name. Verified directly: for params.2.fname(aa = 1, cc = 2), this produced nmz = c("1", "2") (the values, stringified) instead of c("aa", "cc") (the names), so the function's own documented example, params.2.fname(aa = 1, cc = 2, d = NULL, sep = ".", collapse = "_"), returned "1.1_2.2" instead of the documented "aa.1_cc.2" - every parameter name in the output was silently replaced by that parameter's own value. Fixed by using `names(x)` (x <- list(...) is already computed on the line above) instead of the substitute/deparse trick. 2. Missing @export: despite having a complete roxygen block (title, description, params, a worked example) matching every other exported function's style, and already having a generated man/params.2.fname.Rd, the function itself was never added to NAMESPACE. Its own example couldn't even run under R CMD check ("could not find function params.2.fname"), which is how bug 1 stayed unnoticed - the function was never reachable by any external caller to begin with. Added @export. Version bumped 1.2.1 -> 1.2.2 in Development/config.R and DESCRIPTION. Validation: manually confirmed params.2.fname(aa = 1, cc = 2, d = NULL, sep = ".", collapse = "_") now returns "aa.1_cc.2" as documented. R CMD check's "checking examples" ERROR that was previously raised by this function's own broken example is gone (NAMESPACE now correctly exports it: export(params.2.fname), man/params.2.fname.Rd was already accurate and needed no changes). The existing testthat suite still passes 7/7. Remaining R CMD check findings (parFlags example error - fixed in another PR in this batch, %!in% Rd name warning, sandbox locale warning, and doc issues fixed in other independent PRs in this batch) are pre-existing/environment-inherent and out of scope here. --- DESCRIPTION | 2 +- Development/config.R | 2 +- NAMESPACE | 1 + R/Stringendo.R | 3 ++- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d3a7377..21587b7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: Stringendo Title: Stringendo - string manipulation utilities -Version: 1.2.1 +Version: 1.2.2 Authors@R: person("Abel", "Vertesy", , "av@imba.oeaw.ac.at", role = c("aut", "cre")) Description: Stringendo is a set of R functions to parse strings from diff --git a/Development/config.R b/Development/config.R index e0a52bb..a90f15e 100644 --- a/Development/config.R +++ b/Development/config.R @@ -3,7 +3,7 @@ DESCRIPTION <- list( package.name = "Stringendo", - version = "1.2.1", + version = "1.2.2", title = "Stringendo - string manipulation utilities", description = "Stringendo is a set of R functions to parse strings from variables and to manipulate strings.", diff --git a/NAMESPACE b/NAMESPACE index da5cc90..98e1919 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -55,6 +55,7 @@ export(parFlags) export(parFlags2) export(param.list.2.fname) export(param.list.flag) +export(params.2.fname) export(parseParamStringWNames) export(parsepvalue) export(percentage_formatter) diff --git a/R/Stringendo.R b/R/Stringendo.R index af8ffe8..7ac9525 100644 --- a/R/Stringendo.R +++ b/R/Stringendo.R @@ -1420,9 +1420,10 @@ parseParamStringWNames <- function(named.vec, sep1 = ": ", sep2 = " | ") { #' @examples #' params.2.fname(aa = 1, cc = 2, d = NULL, sep = ".", collapse = "_") #' # Returns "aa.1_cc.2" +#' @export params.2.fname <- function(..., sep = ".", collapse = "_") { x <- list(...) - nmz <- as.character(substitute(list(...))[-1]) + nmz <- names(x) # Filter out NULL values idx.empty <- sapply(x, is.null) From 0c2a5398ea902e46b986b08281b065de08ea046e Mon Sep 17 00:00:00 2001 From: Abel Vertesy Date: Sun, 30 Aug 2026 18:33:57 +0200 Subject: [PATCH 3/7] Fix discarded return value and missing variable in 2 functions ReplaceSpecialCharacters() called ReplaceRepeatedDots(x) but discarded its result, so repeated dots were never actually collapsed. parFlags() referenced an undefined `namez`, erroring on every call. Co-Authored-By: Claude Sonnet 5 --- R/Stringendo.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/Stringendo.R b/R/Stringendo.R index fd4652f..b78a6a6 100644 --- a/R/Stringendo.R +++ b/R/Stringendo.R @@ -552,7 +552,7 @@ ReplaceSpecialCharacters <- function(string = "obj@meta$alpha[[3]]", replacement # Replace " ." or ". " with "." x <- gsub(x = x, pattern = " \\.", replacement = ".", perl = TRUE) x <- gsub(x = x, pattern = "\\. ", replacement = ".", perl = TRUE) - ReplaceRepeatedDots(x) + x <- ReplaceRepeatedDots(x) if (remove_dots) x <- gsub(x = x, pattern = "\\.", replacement = "") else x } @@ -1577,6 +1577,7 @@ parFlags <- function(prefix = "", collapsechar = ".") { .Deprecated("parFlags2") val <- c(...) + namez <- as.character(as.list(match.call())[-(1:2)]) names(val) <- namez flg <- names(val)[val] print(flg) From b9f616c852ad617d13cd02fe33f031f8e9b8d407 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:46:55 +0000 Subject: [PATCH 4/7] Fix parFlags() namez extraction to only read dots arguments match.call() included every supplied argument (prefix, pasteflg, collapsechar), so slicing off the first two elements broke as soon as a control argument was passed or reordered. Extract names directly from the `...` pairlist instead, using each argument's explicit name when given or its deparsed expression otherwise. Co-authored-by: Abel Vertesy <5101911+vertesy@users.noreply.github.com> --- R/Stringendo.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/R/Stringendo.R b/R/Stringendo.R index b78a6a6..9267417 100644 --- a/R/Stringendo.R +++ b/R/Stringendo.R @@ -1577,7 +1577,11 @@ parFlags <- function(prefix = "", collapsechar = ".") { .Deprecated("parFlags2") val <- c(...) - namez <- as.character(as.list(match.call())[-(1:2)]) + dotz <- match.call(expand.dots = FALSE)$"..." + namez <- vapply(seq_along(dotz), function(i) { + nm <- names(dotz)[i] + if (!is.null(nm) && nzchar(nm)) nm else deparse(dotz[[i]]) + }, character(1)) names(val) <- namez flg <- names(val)[val] print(flg) From 3840a28766e7336d4384c9fda860041ef0550f29 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:47:12 +0000 Subject: [PATCH 5/7] Restore params.2.fname() with the name-recovery fix and export An earlier merge on this PR branch removed params.2.fname() entirely under the assumption it was dead code, but it is used in a downstream package. Restore the function together with the original bug fix (names(x) instead of the broken substitute/deparse trick) and its @export tag, man page, and doc/dependency-graph references. Co-authored-by: Abel Vertesy <5101911+vertesy@users.noreply.github.com> --- Development/Dependencies.Mermaid.md | 1 + NAMESPACE | 1 + R/Stringendo.R | 35 +++++++++++++++++++++++++++++ README.md | 21 ++++++++++------- man/params.2.fname.Rd | 27 ++++++++++++++++++++++ 5 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 man/params.2.fname.Rd diff --git a/Development/Dependencies.Mermaid.md b/Development/Dependencies.Mermaid.md index ecc6bcf..b52b41c 100644 --- a/Development/Dependencies.Mermaid.md +++ b/Development/Dependencies.Mermaid.md @@ -7,6 +7,7 @@ sppu(sppu) --> kppu(kppu) sppu(sppu) --> ReplaceRepeatedUnderscores(ReplaceRepeatedUnderscores) sppu(sppu) --> RemoveFinalUnderscores(RemoveFinalUnderscores) + params.2.fname(params.2.fname) --> sppp(sppp) kpwNames(kpwNames) --> HasNames(HasNames) ifExistsAndTrue(ifExistsAndTrue) --> iprint(iprint) extPNG(extPNG) --> ppp(ppp) diff --git a/NAMESPACE b/NAMESPACE index 6ae9268..e54c23f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,2 +1,3 @@ # Generated by roxygen2: do not edit by hand +export(params.2.fname) diff --git a/R/Stringendo.R b/R/Stringendo.R index 1924806..cfe9e9c 100644 --- a/R/Stringendo.R +++ b/R/Stringendo.R @@ -1408,6 +1408,41 @@ parseParamStringWNames <- function(named.vec, sep1 = ": ", sep2 = " | ") { return(paste(pairs, collapse = sep2)) } +# _________________________________________________________________________________________________ +#' @title Convert Named Parameters to Filename +#' +#' @description This function takes named parameters and converts them into a filename string with +#' specified separators and collapse characters. It excludes any parameters with NULL values. +#' +#' @param ... Named parameters to be converted. Default: None. +#' @param sep A string to separate parameter names and their values. Default: ".". +#' @param collapse A string to separate different parameters in the output string. Default: "_". +#' +#' @return A character string that represents the combined parameter names and values, separated +#' by the specified `sep` and `collapse` characters. +#' +#' @examples +#' params.2.fname(aa = 1, cc = 2, d = NULL, sep = ".", collapse = "_") +#' # Returns "aa.1_cc.2" +#' @export +params.2.fname <- function(..., sep = ".", collapse = "_") { + x <- list(...) + nmz <- names(x) + + # Filter out NULL values + idx.empty <- sapply(x, is.null) + x <- x[!idx.empty] + nmz <- nmz[!idx.empty] + + # Fix if not a single value + x <- sapply(x, sppp) + + result <- paste(nmz, x, sep = sep, collapse = collapse) + + return(result) +} + + # _________________________________________________________________________________________________ #' @title param.list.2.fname #' @description Take a list of parameters and parse a string from their names and values. diff --git a/README.md b/README.md index b0ffe46..4c91df1 100644 --- a/README.md +++ b/README.md @@ -308,35 +308,39 @@ Updated: 2026/08/28 18:43 Parse Parameter String with Names. This function parses a named vector and intermingles the names and values into a single string, with specified separators for the odd and even elements. -- #### 67 `param.list.2.fname()` +- #### 67 `params.2.fname()` + + Convert Named Parameters to Filename. This function takes named parameters and converts them into a filename string with specified separators and collapse characters. It excludes any parameters with NULL values. + +- #### 68 `param.list.2.fname()` param.list.2.fname. Take a list of parameters and parse a string from their names and values. -- #### 68 `PasteOutdirFromFlags()` +- #### 69 `PasteOutdirFromFlags()` PasteOutdirFromFlags. Paste OutDir from (1) a path and (2) a from a list of inputs (that can be empty), and clean up the output string from dot and forward slash multiplets (e.g: ..). -- #### 69 `flag.name_value()` +- #### 70 `flag.name_value()` flag.name_value. Returns the name and its value, if its not FALSE. -- #### 70 `flag.nameiftrue()` +- #### 71 `flag.nameiftrue()` flag.nameiftrue. Returns the name and its value, if its TRUE. -- #### 71 `flag.names_list.all.new()` +- #### 72 `flag.names_list.all.new()` flag.names_list.all.new. Returns the name and value of each element in a list of parameters. -- #### 72 `param.list.flag()` +- #### 73 `param.list.flag()` param.list.flag. Returns the name and value of each element in a list of parameters. -- #### 73 `parFlags()` +- #### 74 `parFlags()` parFlags. Create a string from the names of the (boolean) parameters (TRUE or FALSE) of true values. Use it for Suffixing plot names with the parameters that were used for that plot. -- #### 74 `FormatAsExcelLink()` +- #### 75 `FormatAsExcelLink()` parFlags2. Create a string from the names of the (boolean) parameters (TRUE or FALSE) of true values. Use it for Suffixing plot names with the parameters that were used for that plot. @@ -352,6 +356,7 @@ Updated: 2026/08/28 18:43 sppu(sppu) --> kppu(kppu) sppu(sppu) --> ReplaceRepeatedUnderscores(ReplaceRepeatedUnderscores) sppu(sppu) --> RemoveFinalUnderscores(RemoveFinalUnderscores) + params.2.fname(params.2.fname) --> sppp(sppp) kpwNames(kpwNames) --> HasNames(HasNames) ifExistsAndTrue(ifExistsAndTrue) --> iprint(iprint) extPNG(extPNG) --> ppp(ppp) diff --git a/man/params.2.fname.Rd b/man/params.2.fname.Rd new file mode 100644 index 0000000..a15327d --- /dev/null +++ b/man/params.2.fname.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Stringendo.R +\name{params.2.fname} +\alias{params.2.fname} +\title{Convert Named Parameters to Filename} +\usage{ +params.2.fname(..., sep = ".", collapse = "_") +} +\arguments{ +\item{...}{Named parameters to be converted. Default: None.} + +\item{sep}{A string to separate parameter names and their values. Default: ".".} + +\item{collapse}{A string to separate different parameters in the output string. Default: "_".} +} +\value{ +A character string that represents the combined parameter names and values, separated +by the specified \code{sep} and \code{collapse} characters. +} +\description{ +This function takes named parameters and converts them into a filename string with +specified separators and collapse characters. It excludes any parameters with NULL values. +} +\examples{ +params.2.fname(aa = 1, cc = 2, d = NULL, sep = ".", collapse = "_") +# Returns "aa.1_cc.2" +} From 2e9335201c62cc33886c7d18fca90d3bb6a9a1cb Mon Sep 17 00:00:00 2001 From: Abel Vertesy Date: Mon, 31 Aug 2026 21:56:05 +0200 Subject: [PATCH 6/7] Fix malformed parFlags2 assignment --- R/Stringendo.R | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/R/Stringendo.R b/R/Stringendo.R index 887491b..45784cd 100644 --- a/R/Stringendo.R +++ b/R/Stringendo.R @@ -1610,13 +1610,14 @@ parFlags2 <- function(prefix = ".", pasteflg = TRUE, coll.char = ".", coll.char.intra = "_") { + stopifnot( + is.character(prefix), length(prefix) == 1, + is.logical(pasteflg), length(pasteflg) == 1, + is.character(coll.char), length(coll.char) == 1, + is.character(coll.char.intra), length(coll.char.intra) == 1 + ) val <- c(...) - - - - - - <- as.character(as.list(match.call())[-(1:2)]) + namez <- as.character(as.list(match.call())[-(1:2)]) names(val) <- namez flg <- if (pasteflg) { paste0( From f3f543f14543b8b6937ea83b86c507777b6816c2 Mon Sep 17 00:00:00 2001 From: Abel Vertesy Date: Mon, 31 Aug 2026 22:08:46 +0200 Subject: [PATCH 7/7] Update name assignment for vector 'val' Refactor name assignment for 'val' using match.call. This should address Codex's comment. --- R/Stringendo.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/Stringendo.R b/R/Stringendo.R index 45784cd..04f2fa0 100644 --- a/R/Stringendo.R +++ b/R/Stringendo.R @@ -1617,8 +1617,8 @@ parFlags2 <- function(prefix = ".", is.character(coll.char.intra), length(coll.char.intra) == 1 ) val <- c(...) - namez <- as.character(as.list(match.call())[-(1:2)]) - names(val) <- namez + names(val) <- as.character(match.call(expand.dots = FALSE)[["..."]]) + flg <- if (pasteflg) { paste0( prefix,