[R] Open a file which name contains a tilde

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sat Jun 8 12:38:44 CEST 2019


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 <ccberry using ucsd.edu> wrote:
> 
>>
>>
>>> On Jun 6, 2019, at 2:04 PM, Richard O'Keefe <raoknz using 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.r00t using gmail.com> wrote:
>>>
>>>> On Wed, 5 Jun 2019 18:07:15 +0200
>>>> Frank Schwidom <schwidom using 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 using 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 using 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.
>



More information about the R-help mailing list