Josiah Parry
2025-Jun-02 15:37 UTC
[Rd] Specifying a long string literal across several lines
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! On Mon, Jun 2, 2025 at 3:19?AM Tomas Kalibera <tomas.kalibera at 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 at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Tomas Kalibera
2025-Jun-02 16:27 UTC
[Rd] Specifying a long string literal across several lines
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 at 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 at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >
Maybe Matching Threads
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines
- Specifying a long string literal across several lines