[R] Scan and Lists
Martin Maechler
maechler at stat.math.ethz.ch
Thu Sep 15 10:19:05 CEST 2005
>>>>> "Michael" == Michael Lefsky <lefsky at gmail.com>
>>>>> on Wed, 14 Sep 2005 15:06:17 -0600 writes:
Michael> This may be a newbie question - although I did
Michael> search for this error message in the archives and
Michael> via google and didn't see this error:
I know how useful google can be - - still, sometimes one would
better spend the time differently ... You know the old IBM
motto? If not, google for "IBM motto" ;-)
Michael> The help page for "scan" indicates that among the types of data
Michael> capable of being read are:
>> "The supported types are 'logical', 'integer', 'numeric',
>> 'complex', 'character', 'raw' and 'list': 'list' values
>> should have elements which are one of the first six types
>> listed or 'NULL'.
Michael> I have tried to use a list within a "what" list :
which was wrong:
Michael> f <- scan(file="c:/test/testout.csv",
Michael> what=list(hi=0.0,bye="",wave=list(1:1000)),
Michael> sep=",",skip=1)
Michael> and the following error is returned:
Michael> "c:/test/testout.csv", what = list(hi = 0, bye = "", :
Michael> unimplemented type 'list' in 'extractItem'
Michael> So, is my syntax confusing R, or is the documentation wrong, or is it
Michael> some other, third, option?
3rd: You didn't read the documentation carefully enough
(though I agree that the current wording leaves a non-small
possibility for confusion):
In your above citation from the help page, you've left off
crucial context. Here is a bit more
>> what: the type of 'what' gives the type of data to be read. If
>> 'what' is a list, it is assumed that the lines of the data
>> file are records each containing 'length(what)' items
>> ("fields"). The supported types are 'logical', 'integer',
>> 'numeric', 'complex', 'character', 'raw' and 'list': 'list'
>> values should have elements which are one of the first six
>> types listed or 'NULL'.
So 'what' has a *type* and that type can be logical, ...., and list.
where list should have elements from the first six types ---
which do *NOT* include list.
In short: It does exclude using a *list* inside the list.
Is your data
<double> <character> <int> <int> .... <int>
with 1000 integers, i.e. you have 1002 columns?
If yes, you'd probably get what you want by
whatCols <- c(list(hi=0.0, bye=""), as.list(1:1000))
f <- scan(file = "c:/test/testout.csv",
what = whatCols, sep= ",", skip=1)
{The point here is that c(l1, l2) is used to concatenate two
lists l1 and l2;
and yes: Please do use spaces {and indentation} to make your
more readable !
}
Michael> Thanks
You're welcome,
Martin Maechler, ETH Zurich
More information about the R-help
mailing list