Dear Henrique,

Thanks! This does work, and I find the following solution to my original problem elegant enough:

> rep(list(character, integer, numeric, ...), c(3, 2, 2, ...))

Best regards,
Craig



Henrique Dallazuanna wrote:
From the help page of rep:


"Value:

     An object of the same type as 'x' (except that 'rep' will coerce
     pairlists to vector lists)."

So, you can do:

rep(list(character), 2)

On Tue, Jun 30, 2009 at 9:00 AM, Craig P. Pyrame <crap...@gmail.com <mailto:crap...@gmail.com>> wrote:

    Dear list,

    I am trying to construct a list of functions using rep.  I can't
    understand the following:

    > c(character, character) => list with two functions
    > rep(character, 2) => error

    The error says that "object of type 'special' is not subsettable",
    and I have no idea what this means.  Would you please help me.

    The purpose of doing the above is that I need to use scan for
    reading files that happen to be too large and a bit irregular for
    read.table.  To make scan work, I need to specify the types of
    values in each column (record field).  I can specify the 'what'
    argument as follows:

    > records <- scan(..., what = list(character(0), character(0),
    integer(0), numeric(0), character(0), ...), ...)

    but this quickly becomes boring for large enough records. (Why
    does not scan take a character string with class names, as
    read.table does, instead of a list with dummy objects?) So I am
    trying to do tricks, and one idea that seems pretty simple is to
    create a list of functions that create vectors of a particular
    type, and apply them (using lapply) to get a list of prototype
    objects:

    > types = lapply(c(rep(character, 2), integer, numeric, ...),
    function(type) type(0)) => error

    But this fails, as above.  Why?  Why can c(character, character)
    create a list of two functions, but rep(character, 2) can't?

    Another solution to my problem I could find (and you'll hopefully
    suggest an even better one) is to use class names instead, like so:

    > types = lapply(c(rep('character', 2), 'integer', 'numeric',
    ...), function(type) vector(type, 0))

    but I am still curious why the above doesn't work as I would
    expect it to.

    Best regards,
    Craig

    ______________________________________________
    R-help@r-project.org <mailto:R-help@r-project.org> mailing list
    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.




--
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O

______________________________________________
R-help@r-project.org mailing list
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