[Rd] Specifying a long string literal across several lines
Kasper Daniel Hansen
k@@perd@n|e|h@n@en @end|ng |rom gm@||@com
Mon Jun 2 22:59:37 CEST 2025
Like Tomas, I find the paste0 readability to be **much** better, partly
because it allows for better indentation (as Tomas pointed out). Perhaps a
pointless email, but sometimes - for these subjective issues - it is
worthwhile to point out a difference in opinion.
Best,
Kasper
On Mon, Jun 2, 2025 at 12:27 PM Tomas Kalibera <tomas.kalibera using gmail.com>
wrote:
>
> 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
> <https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/%5CPLACES_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
> >
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
--
Best,
Kasper
[[alternative HTML version deleted]]
More information about the R-devel
mailing list