From simon.urbanek at r-project.org  Tue Mar 27 23:11:23 2007
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Tue, 27 Mar 2007 17:11:23 -0400
Subject: [Rd] Limitation of dirname() and basename()
In-Reply-To: <46096739.20006@aon.at>
References: <460807A7.5030405@aon.at>	<Pine.LNX.4.64.0703270744580.9277@gannet.stats.ox.ac.uk>
	<46095818.9080703@aon.at> <46096180.5070907@cimr.cam.ac.uk>
	<46096739.20006@aon.at>
Message-ID: <ADFA2A8A-B14B-44D9-899C-EFBE529E6F66@r-project.org>


On Mar 27, 2007, at 2:49 PM, cstrato wrote:

> Hin-Tak Leung wrote:
>> cstrato wrote:
>>> 1. I did read the help file.
>>> 2. I have my own workaround, using e.g.
>>> file.info("/my/path/")[,"isdir"]
>>> 3. This was a suggestion.
>>> 4. If you agree with me that "/my/path/" is a path, then both
>>>    "dirname()" and "dirname" give an incorrect answer.
>>> 5. Maybe, you can give me a logical reason (besides a
>>>    historical reason) why this should be the way it is.
>>
>> Can you just read "man 3 dirname" and "man 1 dirname" on any unix  
>> box?
>> Isn't "historical reason" - this is how dirname works for the last
>> 25(?) years, some people will be *very* upset if it behaves
>> differently now -
>> a good enough reason?
>>
>> HTL
> A 25 year old mistake is no reason for R to duplicate this mistake.


Please read the corresponding docs before posting such nonsense  
(especially the Rationale section):
http://www.opengroup.org/onlinepubs/000095399/utilities/basename.html

Your proposed behavior is inconsistent, anyway. The purpose of  
dirname is to return parent directory of the entity represented by  
the pathname. "/my/path" and "/my/path/" are equivalent as they both  
represent the directory "path" whose parent is "/my", therefore  
returning "/my/path" in either case is inconsistent with the purpose  
of this function. As of trailing slashes (independently of dirname),  
sadly, some programs exploit the equivalence of both representations  
by encoding meta-information in the representation, but this behavior  
is quite confusing and error-prone. You're free to add such special  
cases to your application, but there is no reason to add such  
confusion to R.

Cheers,
Simon



>>
>>> Prof Brian Ripley wrote:
>>>> These functions work as they should: did you not read the help page
>>>> which explicitly tells you what happens in this case?
>>>>
>>>> The Unix originals work in the same way:
>>>>
>>>> gannet% dirname /my/path/
>>>> /my
>>>>
>>>> Please DO study the R posting guide and do the homework requesting
>>>> of you before posting.
>>>>
>>>> On Mon, 26 Mar 2007, cstrato wrote:
>>>>
>>>>> Dear all,
>>>>>
>>>>> I have already twice encountered a case which I consider a
>>>>> limitation of
>>>>> dirname() and basename().
>>>>>
>>>>> In my functions I have a parameter "outfile" which e.g. tells  
>>>>> where
>>>>> a file
>>>>> should be stored. Usually "outfile" is of the form:
>>>>> oufile = "/my/path/myname.txt"
>>>>>
>>>>>> outfile <- "/my/path/myname.txt"
>>>>>> dirname(outfile)
>>>>> [1] "/my/path"
>>>>>> basename(outfile)
>>>>> [1] "myname.txt"
>>>>>
>>>>> However, in addition I want to be able to define the path only,  
>>>>> while
>>>>> creating the name "myname.txt" automatically.
>>>>> Sorrowly, I get the following:
>>>>>
>>>>>> outfile <- "/my/path/"
>>>>>> dirname(outfile)
>>>>> [1] "/my"
>>>>>> basename(outfile)
>>>>> [1] "path"
>>>>>
>>>>> It would be great if dirname() and basename() could recognize:
>>>>> dirname("/my/path/")      = /my/path/
>>>>> basename(""/my/path/")  = ""
>>>>> i.e. they should be able to recognize a trailing "/".
>>>> Not according to the documentation.
>>>>
>>>>> Best regards
>>>>> Christian
>>>>> _._._._._._._._._._._._._._._._
>>>>> C.h.i.s.t.i.a.n S.t.r.a.t.o.w.a
>>>>> V.i.e.n.n.a       A.u.s.t.r.i.a
>>>>> _._._._._._._._._._._._._._._._
>>>
>>> ______________________________________________
>>> 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
>
>



[Rd] Limitation of dirname() and basename()
Simon Urbanek