Have you ever noticed that when you run

x <- 1:5
y <- 2:6
plot( x, y+1 )

you get the expressions you used in your call to plot on the axis labels? `x` 
is an expression consisting of a single symbol and y+1 is an expression 
consisting of the addition operator and two arguments: the symbol x and the 
constant 1. Plot uses these expressions in two ways: one to get numbers to 
plot, but also converts the expressions into strings that can be printed on the 
axes.

The save function has an `...` argument that it expects to find symbol names 
in,  and when you pass an expression as an unnamed argument instead and it then 
tries to convert the expression to a string and use that as a name for a 
variable, you get problems.... so don't do that. 

The save function also has the named argument `list` that does not have that 
symbol-name-extracting behaviour. By explicitly passing a vector of character 
strings (of length one in your case) in the named `list` argument you avoid 
that special handling applied by the save function to the `...` argument.

It does seem strange at first, but it goes along with some rather convenient 
features of the R statistical environment like formulas and intuitive plot 
labeling, and the ability to use

save( Var_2000, file = paste0( "Var_", year, ".Rdata" ) )

with no quotes. 

On April 9, 2018 9:11:49 PM PDT, Marc Girondot via R-help 
<r-help@r-project.org> wrote:
>Dear list member,
>
>I think that I have detected a strange behavior of the save() command:
>
> > year <- "2000"
> > assign(paste0("Var_", year), list(A=10, B=20))
> > get(paste0("Var_", year))
>$A
>[1] 10
>
>$B
>[1] 20
>
># At this point all is ok, I have created a list of name Var_2000
>
> > save(paste0("Var_", year), file=paste0("Var_", year, ".Rdata"))
>Error in save(paste0("Var_", year), file = paste0("Var_", year, 
>".Rdata")) :
>   objet ‘paste0("Var_", year)’ introuvable
>
>(introuvable=cannot be found)
>
>but
>
> > save("Var_2000", file=paste0("Var_", year, ".Rdata"))
>
>When I read the help for save: ?save
>
>...    the names of the objects to be saved (as symbols or character 
>strings).
>
>I checked if paste0("Var_", year) produced a character string:
>
> > str("Var_2000")
>  chr "Var_2000"
> > str(paste0("Var_", year))
>  chr "Var_2000"
>
>The solution was to include the name in the list argument:
>
> > save(list=paste0("Var_", year), file=paste0("Var_", year, ".Rdata"))
>
>But I don't understand what is the difference between "Var_2000" and 
>paste0("Var_", year) as both produced the same output.
>
>Thanks for your help,
>
>Marc
>
>
>R Under development (unstable) (2018-03-23 r74448) -- "Unsuffered 
>Consequences"
>Copyright (C) 2018 The R Foundation for Statistical Computing
>Platform: x86_64-apple-darwin15.6.0 (64-bit)
>
>______________________________________________
>R-help@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.

-- 
Sent from my phone. Please excuse my brevity.

______________________________________________
R-help@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.

Reply via email to