From henr|k@bengt@@on @end|ng |rom gm@||@com  Thu Mar  3 05:13:00 2022
From: henr|k@bengt@@on @end|ng |rom gm@||@com (Henrik Bengtsson)
Date: Wed, 2 Mar 2022 20:13:00 -0800
Subject: [Rd] strsplit() and final empty values
In-Reply-To: <CAC0O-5f1U2m8ji=4UMWNBFwW7DFU72L1eNyo6nJN0sBpbcCPdw@mail.gmail.com>
References: <CAC0O-5f1U2m8ji=4UMWNBFwW7DFU72L1eNyo6nJN0sBpbcCPdw@mail.gmail.com>
Message-ID: <CAFDcVCTPUqygyNHsKJYp=UAGhFcjOigrtsjno-=J+9T7=dLN8w@mail.gmail.com>

Here's an example clarifying the issue:

> strsplit("a:b:c:d", split = ":", fixed = TRUE)
[[1]]
[1] "a" "b" "c" "d"

> strsplit("a:b:c:", split = ":", fixed = TRUE)
[[1]]
[1] "a" "b" "c"

I also ran into this a few times, and I agree that this complicated
things when you need to preserve that last empty element.  Instead of
changing the default behavior, which would probably break lots of
existing code relying on it, one could introduce a new,
backward-compatible argument `drop = TRUE`, e.g.

> strsplit("a:b:c:", split = ":", fixed = TRUE, drop = FALSE)
[[1]]
[1] "a" "b" "c" ""

My $.02

/Henrik



On Sat, Feb 26, 2022 at 6:39 AM Dzmitry Batrakou <d.batrakou at gmail.com> wrote:
>
> Hello,
>
> I would like to suggest changing the behaviour of the strsplit() function
> with multiple trailing empty values. Currently, `strsplit(x = 'value::',
> split = ':')` produces a list of length 2 ('value',''). This behaviour is
> documented in the manual (penultimate example), however, I would argue, is
> illogical and can lead to unexpected parsing results. One example is
> splitting delimited value strings into a table.
>
> Regards,
> Dzmitry
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] strsplit() and final empty values
Henrik Bengtsson