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@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