[R] quotes within quotes
Prof Brian Ripley
ripley at stats.ox.ac.uk
Wed Apr 9 18:39:05 CEST 2003
On Wed, 9 Apr 2003, janet rosenbaum wrote:
> Thanks for all the suggestions.
> Some people asked why I'm bothering with all this. This is just
> the toy code I'm trying on the command-line, but the two errors below
> are the same as I get in the real code.
I think those people were right: you seem to be misunderstanding do.call.
> It's true that I could avoid the modularity, but it improves readability
> and maintainability immensely.
>
> Here are my results to three suggestions. The pathnames below are all
> abbreviated for readability.
>
> 1. do.call seems to work.
>
> Both of the following successfully read the data in:
>
> > read.dta("C:/Documents and Settings/mexchn_gary.dta", convert.factors=FALSE)
> > do.call("read.dta", list(file="C:/Documents and Settings/mexchn_gary.dta", convert.factors=FALSE))
>
> 2. quotes within quotes:
>
> Correspondants suggested using single quotes or backslashes to escape
> the quotes. It turns out R interprets both the same way.
>
> > cmd <- "read.dta"
> > opt <- "convert.factors=FALSE"
> > data.file <- 'file="C:/Documents and Settings/mexchn_gary.dta"'
> > do.call(cmd, list(data.file, opt))
> Error in read.dta("file=\"C:/Documents and Settings/mexchn_gary.dta\"", :
> unable to open file
That's nothing to do with quotes within quotes. You should be giving a
*named list* to do.call, not a list of "var=value" strings.
> 3. Avoid using quotes within quotes
>
> When we call read.dta and don't use "file=", it works (see #1), but not
> inside do.call.
>
> > data.file <- "C:/Documents and Settings/mexchn_gary.dta"
> > do.call(cmd, list(data.file, opt))
> Error in if (convert.dates) { : argument is not interpretable as
> logical
It's your `opt' which is in the wrong format:
cmd <- "read.dta"
cf <- FALSE
data.file <- "C:/Documents and Settings/mexchn_gary.dta"
do.call(cmd, list(file=data.file, convert.factors=cf))
is a correct way to use do.call. You could also do something like
args <- list(data.file, cf)
names(args) <- c("file", "convert.factors")
do.call(cmd, args)
and that's the sort of thing discussed for useful examples in section 3.5
of `S Programming'.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list