Hi, Simon Urbanek wrote: > Your proposed behavior is inconsistent, anyway. The purpose of > dirname is to return parent directory of the entity represented by > the pathname.
Mmmm, I don't think this is true: > dirname("aaa/..") [1] "aaa" "aaa" is not the parent directory of "aaa/.." Same here: > dirname("/usr/./.") [1] "/usr/." > "/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. Note that Python's designers were not afraid to emancipate from Unix for this particular case: >>> import os.path >>> os.path.dirname("aaa/..") 'aaa' >>> os.path.dirname("aaa/../") 'aaa/..' Also note that, if the goal was to mimic Unix behaviour, then why not fully go for it, even for edge-cases: R ---- > dirname("/") [1] "/" > basename("/") [1] "" Unix ---- [EMAIL PROTECTED]:~> dirname "/" / [EMAIL PROTECTED]:~> basename "/" / Just my 2 cents... Cheers, H. > > 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@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> >>> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel