[Rd] savePlot() no longer automatically adds an extension to the filename.
Simon Urbanek
simon.urbanek at r-project.org
Wed Jun 4 04:36:05 CEST 2008
On Jun 3, 2008, at 8:40 PM, Duncan Murdoch wrote:
> On 03/06/2008 2:35 PM, Mike Prager wrote:
>> "S Ellison" <S.Ellison at lgc.co.uk> wrote:
>>> Plaintive squeak: Why the change?
>>> Some OS's and desktops use the extension, so forgetting it causes
>>> trouble. The new default filename keeps a filetype (as before) but
>>> the
>>> user now has to type a filetype twice (once as the type, once as
>>> extension) to get the same effect fo rtheir own filenames. And the
>>> extension isn't then checked for consistency with valid file
>>> types, so
>>> it can be mistyped and saved with no warning. Hard to see the
>>> advantage
>>> of doing away with it...
>> Just for the record. . .
>> This change broke a *lot* of my code, including code used by
>> others. Windows depends on file extensions. Fortunately, fixes
>> using getRversion are not too difficult.
>
> Then you'll be happy to hear that Steve put together a patch and
> it's already committed, so it should make it into 2.7.1. The patch
> adds the extension if there's no dot in the name, leaves the
> filename as-is if it sees one. So this should be compatible with
> the majority of uses, only messing up cases where people really
> don't want an extension (now they'll have to add a dot at the end of
> their filename), or where they want an automatic one, but have
> another dot in the name.
>
AFAICS the savePlot() behavior is now (as of r45830) inconsistent
across platforms due to the patch (r458229). The inconsistency is IMHO
a bad thing - you shouldn't expect the same function to behave
differently across platforms.
I'd strongly recommend against this change for several reasons: it
changes the behavior of the function between 2.7.0 and 2.7.1, so that
now you have to special-case three different versions (pre 2.7.0,
2.7.0 and 2.7.1), there is now no way to specify a file without a dot
(which is quite common in non-Windows world) and the behavior is
incompatible with other similar functions.
I think the change of behavior in 2.7.0 was deliberate and in favor of
consistency, because a filename specification should not be randomly
mangled by the function (I have made that mistake myself before, so I
know the pitfalls ;)). Extension is part of the filename, it's not a
separate concept (also note that ".foo" is a valid filename that
doesn't have an extension). The argument about typos is moot since you
can always define functions like
saveFoo <- function(prefix) savePlot(filename = paste(prefix, "foo",
sep="."), type="foo")
At any rate I don't see how this can realistically be part of 2.7.1
since it's not a bugfix and it changes the meaning of a function
parameter. (And I usually don't mind disguising small features as
bugfixes ;P)
Whether the change in 2.7.0 could be done differently (e.g. using
another parameter for a full file name) is a different story, but I
suspect that it should have been discussed before the 2.7.0 release...
Cheers,
Simon
More information about the R-devel
mailing list