[Rd] Specifying a long string literal across several lines

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Mon Jun 2 18:27:20 CEST 2025


On 6/2/25 17:37, Josiah Parry wrote:
> Tomas,
>
> Here is a good example of where this functionality would be useful:
> https://github.com/R-ArcGIS/arcgislayers/blob/2b29f4c254e7e5a1dadce8d4b0015a70dfae39d4/R/arc-open.R#L19-L56
>
> In order to prevent R CMD check notes I have to use `paste0()` to 
> concatenate long URLs. If we were able to use `\` to
> separate the string across multiple lines, it would make the solution 
> much nicer!

It may be a matter of taste. To me the current form

#' furl <- paste0(
#' "https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/",
#'   "PLACES_LocalData_for_BetterHealth/FeatureServer/0"
#' )
#'

would be actually clearer than say this:

#' # FeatureLayer
#' furl <- 
"https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/\
PLACES_LocalData_for_BetterHealth/FeatureServer/0"
#'

Inside a per-line comment (#), a backslash followed by a newline would 
probably be disallowed, anyway - e.g. in C it is considered dangerous 
and is discouraged. And the code resulting from splices is hard to read 
due to missing indentation. There is also risk of accidentally putting a 
space after the backslash before the end of line (which some 
languages/parsers then don't treat as a splice, some do, some issue a 
warning - of course it is hard to see in the code).

The idea of automatically concatenating consecutive string literals as 
in C would not easily work in R. This is now valid R code:

x <- "part1"
"part2"

if we introduced concatenation, we would change behavior of this code 
(the value of x would be different, the result of these two lines would 
be different).

I think paste0() is not that bad in the end.

Best
Tomas

> On Mon, Jun 2, 2025 at 3:19 AM Tomas Kalibera 
> <tomas.kalibera using gmail.com> wrote:
>
>
>     On 5/28/25 04:15, Pavel Krivitsky via R-devel wrote:
>     > Dear All,
>     >
>     > Perhaps this should go in r-package-devel, but I suspect that
>     this is
>     > going to turn into a feature request, and I want to run it by
>     the list
>     > before filing it in the Bugzilla.
>     >
>     > I would like to specify a long string literal without making the
>     line
>     > of code too long. In R,
>     >
>     > "abc
>     > def"
>     >
>     > yields the string "abc\def", and, as far as I can tell, there is no
>     > mechanism for preventing it from inserting a newline into the
>     string.
>     >
>     > Putting a backslash before the newline, i.e.,
>     >
>     > "abc\
>     > def"
>     >
>     > eliminates the newline in (that I know of) C/C++, Python, and Julia,
>     > but it makes no difference in R.
>     >
>     > The implicit concatenation of Python and C/C++, e.g., "abc"
>     "def", is a
>     > syntax error as well in R.
>     >
>     > It is, of course, possible to use paste0(), but is there a more
>     concise
>     > built-in mechanism in R of which I am not aware?
>     >
>     > If not, I think it would make sense to bring R in line with the
>     others.
>     > Currently, backslash and no backslash before a newline behave
>     > identically (at least as far as I can tell), so I doubt that a
>     > nontrivial amount of code relies on the current behaviour. [1]
>
>     What would be real example of a long string literal you would want to
>     enter this way?
>
>     For entering a long text with newlines, one can use raw strings in R
>     (see ?Quotes) - but there you would see the newlines and indentation.
>     I've seen code where  "paste0" has been aliased to a local function
>     named with a single letter to make concatenation more concise.
>
>     Best
>     Tomas
>
>     >
>     >                               Any thoughts?
>     >                               Pavel
>     >
>     > [1] On the off chance that it does, it should easy to check by
>     > searching for "\\\n" in package sources, because a backslash
>     before a
>     > newline is a syntax error outside a string.
>     > ______________________________________________
>     > R-devel using r-project.org mailing list
>     > https://stat.ethz.ch/mailman/listinfo/r-devel
>
>     ______________________________________________
>     R-devel using r-project.org mailing list
>     https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list