Hello,

R 3.6.0 on Ubuntu 19.04.
Since no one mentioned it, notice that the tilde in the middle of a string needs to be surrounded by spaces to be expanded.

The first code line works as expected, only the second is wrong (buggy).

path.expand('a~b')
#[1] "a~b"
path.expand('a ~ b')
#[1] "a /home/rui b"


Rui Barradas

Às 04:27 de 08/06/19, Richard O'Keefe escreveu:
?path.expand
     Expand a path name, for example by replacing a leading tilde by
     the user's home directory (if defined on that platform).

*A* path name.  The argument is a character vector.
If multiple path names are passed, they are passed

     On most builds of R *A LEADING* "~user" will be replaced...

Nothing is said in the R documentation about *multiple* or
*non-leading* tildes being replaced.

The actual behaviour is inconsistent with the documentation.
SOMETHING is a bug.

It's not clear to me why this is in any way dependent on
readline.  I've implemented tilde expansion several times
and always without readline.
It sounds as though R might be calling tilde_expand()
when it *should*, to be consistent with the documentation,
be calling tilde_expand_word().



as separate elements of the character vector.



On Sat, 8 Jun 2019 at 04:10, Berry, Charles <ccbe...@ucsd.edu> wrote:



On Jun 6, 2019, at 2:04 PM, Richard O'Keefe <rao...@gmail.com> wrote:

How can expanding tildes anywhere but the beginning of a file name NOT be
considered a bug?



I think that that IS what libreadline is doing if one allows a whitespace
separated list of file names.

As reported in R-help,

         https://www.mail-archive.com/r-help@r-project.org/msg254116.html

path.expand seems to expand tildes beginning whitespace separated strings
that could be filenames, but not other tildes.

Thus,

path.expand("~/.newsrc ~/.R/*")  # expands both tildes
[1] "/Users/cberry/.newsrc /Users/cberry/.R/*"
path.expand("~/.newsrc~/.R/*")   # expands only the first
[1] "/Users/cberry/.newsrc~/.R/*"


This could be a feature if what one wanted was to pass the result to a
system command that will process multiple file arguments, e.g.

system(paste( "wc", path.expand("~/.newsrc ~/.R/*"))) # run wc on some
files

I doubt that this was intended by R-core, but perhaps the readline devs
had this in mind.

Chuck


On Thu, 6 Jun 2019 at 23:04, Ivan Krylov <krylov.r...@gmail.com> wrote:

On Wed, 5 Jun 2019 18:07:15 +0200
Frank Schwidom <schwi...@gmx.net> wrote:

+> path.expand("a ~ b")
[1] "a /home/user b"

How can I switch off any file crippling activity?

It doesn't seem to be possible if readline is enabled and works
correctly.

Calls to path.expand [1] end up [2] in R_ExpandFileName [3], which
calls R_ExpandFileName_readline [4], which uses libreadline function
tilde_expand [5]. tilde_expand seems to be designed to expand '~'
anywhere in the string it is handed, i.e. operate on whole command
lines, not file paths.

I am taking the liberty of Cc-ing R-devel in case this can be
considered a bug.

--
Best regards,
Ivan

[1]


https://github.com/wch/r-source/blob/12d1d2d232d84aa355e333348b81180a0e2c6f2f/src/main/names.c#L807

[2]


https://github.com/wch/r-source/blob/12d1d2d232d84aa355e333348b81180a0e2c6f2f/src/main/platform.c#L1915

[3]


https://github.com/wch/r-source/blob/12d1d2d232d84aa355e333348b81180a0e2c6f2f/src/unix/sys-unix.c#L147

[4]


https://github.com/wch/r-source/blob/12d1d2d232d84aa355e333348b81180a0e2c6f2f/src/unix/sys-std.c#L494

[5]

https://git.savannah.gnu.org/cgit/readline.git/tree/tilde.c?h=devel#n187

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


       [[alternative HTML version deleted]]





        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to