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