R : Copyright 2003, The R Development Core Team Version 1.7.0 Under development (unstable) (2003-01-24) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type `license()' or `licence()' for distribution details. R is a collaborative project with many contributors. Type `contributors()' for more information. Type `demo()' for some demos, `help()' for on-line help, or `help.start()' for a HTML browser interface to help. Type `q()' to quit R. > ## tests of boundary cases in read.table() > # empty file > file.create("foo1") [1] TRUE > try(read.table("foo1")) # fails Error in read.table("foo1") : no lines available in input > read.table("foo1", col.names=LETTERS[1:4]) [1] A B C D <0 rows> (or 0-length row.names) > unlink("foo1") > > # header only > cat("head\n", file = "foo2") > read.table("foo2") V1 1 head > try(read.table("foo2", header=TRUE)) # fails in 1.2.3 [1] head <0 rows> (or 0-length row.names) > unlink("foo2") > # header detection > cat("head\n", 1:2, "\n", 3:4, "\n", file = "foo3") > read.table("foo3", header=TRUE) head 1 2 3 4 > read.table("foo3", header=TRUE, col.names="V1") V1 1 2 3 4 > read.table("foo3", header=TRUE, row.names=1) head 1 2 3 4 > read.table("foo3", header=TRUE, row.names="row.names") head 1 2 3 4 > read.table("foo3", header=TRUE, row.names="head") # fails in 1.2.3 row.names 2 1 4 3 > > # wrong col.names > try(read.table("foo3", header=TRUE, col.names=letters[1:4])) Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 1 did not have 4 elements In addition: Warning message: header and `col.names' are of different lengths in: read.table("foo3", header = TRUE, col.names = letters[1:4]) > unlink("foo3") > > # incomplete last line > cat("head\n", 1:2, "\n", 3:4, file = "foo4") > read.table("foo4", header=TRUE) head 1 2 3 4 Warning message: incomplete final line found by readTableHeader on `foo4' > unlink("foo4") > > # blank last line > cat("head\n\n", 1:2, "\n", 3:4, "\n\n", file = "foo5") > read.table("foo5", header=TRUE) head 1 2 3 4 > > # test of fill > read.table("foo5", header=FALSE, fill=TRUE, blank.lines.skip=FALSE) # fails in 1.2.3 V1 V2 1 head NA 2 NA 3 1 2 4 3 4 5 NA > unlink("foo5") > > cat("head\n", 1:2, "\n", 3:5, "\n", 6:9, "\n", file = "foo6") > try(read.table("foo6", header=TRUE)) Error in read.table("foo6", header = TRUE) : more columns than column names > try(read.table("foo6", header=TRUE, fill=TRUE)) Error in read.table("foo6", header = TRUE, fill = TRUE) : more columns than column names > read.table("foo6", header=FALSE, fill=TRUE) V1 V2 V3 V4 1 head NA NA NA 2 1 2 NA NA 3 3 4 5 NA 4 6 7 8 9 > unlink("foo6") > > # test of type conversion in 1.4.0 and later. > cat("A B C D E F\n", + "1 1 1.1 1.1+0i NA F abc\n", + "2 NA NA NA NA NA NA\n", + "3 1 2 3 NA TRUE def\n", + sep = "", file = "foo7") > (res <- read.table("foo7")) A B C D E F 1 1 1.1 1.1+0i NA FALSE abc 2 NA NA NA NA NA 3 1 2.0 3.0+0i NA TRUE def > sapply(res, typeof) A B C D E F "integer" "double" "complex" "logical" "logical" "integer" > sapply(res, class) A B C D E F "integer" "numeric" "complex" "logical" "logical" "factor" > (res2 <- read.table("foo7", + colClasses = c("character", rep("numeric", 2), + "complex", "integer", "logical", "character"))) A B C D E F 1 1 1.1 1.1+0i NA FALSE abc 2 NA NA NA NA NA 3 1 2.0 3.0+0i NA TRUE def > sapply(res2, typeof) A B C D E F "double" "double" "complex" "integer" "logical" "character" > sapply(res2, class) A B C D E F "numeric" "numeric" "complex" "integer" "logical" "character" > unlink("foo7") > > # should be logical > type.convert(character(0)) logical(0) > > # test of comments in data files > cat("# a test file", + "# line 2", + "# line 3", + "#line 4", + "# line 5", + "## now the header", + " a b c", + "# some more comments", + "1 2 3", + "4 5 6# this is the second data row of the file", + " # some more comments", + "7 8 9", + "# trailing comment\n", + file= "ex.data", sep="\n") > read.table("ex.data", header = T) a b c 1 1 2 3 2 4 5 6 3 7 8 9 > unlink("ex.data") > > ## comment chars in headers > cat("x1\tx#2\tx3\n1\t2\t2\n2\t3\t3\n", file = "test.dat") > read.table("test.dat", header=T, comment.char="") x1 x.2 x3 1 1 2 2 2 2 3 3 > unlink("test.dat") > > cat('#comment\n\n#another\n#\n#\n', + 'C1\tC2\tC3\n"Panel"\t"Area Examined"\t"# Blemishes"\n', + '"1"\t"0.8"\t"3"\n', '"2"\t"0.6"\t"2"\n', '"3"\t"0.8"\t"3"\n', + file = "test.dat", sep="") > read.table("test.dat") V1 V2 V3 1 C1 C2 C3 2 Panel Area Examined # Blemishes 3 1 0.8 3 4 2 0.6 2 5 3 0.8 3 > unlink("test.dat") > > cat('%comment\n\n%another\n%\n%\n', + 'C1\tC2\tC3\n"Panel"\t"Area Examined"\t"% Blemishes"\n', + '"1"\t"0.8"\t"3"\n', '"2"\t"0.6"\t"2"\n', '"3"\t"0.8"\t"3"\n', + file = "test.dat", sep="") > read.table("test.dat", comment.char = "%") V1 V2 V3 1 C1 C2 C3 2 Panel Area Examined % Blemishes 3 1 0.8 3 4 2 0.6 2 5 3 0.8 3 > unlink("test.dat") > > ## end of tests >