I use the head (d) and tail (d) methods in the R package, which are often used - often one by one. Therefore, I wrote a simple wrapper for two functions:
ht <- function(d, m=5, n=m){ # print the head and tail together cat(" head --> ", head(d,m), "\n", "--------", "\n", "tail --> ", tail(d,n), "\n") }
And I got unexpected results ... can someone please help me understand why? (so that I can fix it ... or at least understand your decision!).
Some prerequisites ...
The number is in order:
x <- 1:100 ht(x)
How difficult:
ni <- as.complex(1:100) ht(ni)
and symbol:
ll <- letters[1:26] ht(ll)
The matrix loses its structure, returning [1,1] in [5,5] + [16,1] to [20,5], but as two vectors - compare:
m <- matrix(1:10, 20) ht(m)
in
head(m, 5) tail(m,5)
I would like to preserve the matrix structure, how do utils methods do this - is this possible?
Finally (well, maybe more errors, this is exactly where I get) data.frames is a mess:
df <- data.frame(num=x[1:26], char=ll) ht(df)
this leads to the following error:
head --> Error in cat(list(...), file, sep, fill, labels, append) : argument 2 (type 'list') cannot be handled by 'cat'
Steps so far:
As the utils method keeps the matrix in order when executed in bits, I tried to fix the problem with the following change:
function(d, m=5, n=m){ # print the head and tail together rb <- rbind(head(d, m), tail(d,n)) if (class(d) == 'matrix'){ len <- nrow(rb) cat(" head --> ", rb[(1:m),], "\n", "--------", "\n", "tail --> ", rb[((len-n):len),], "\n") } else cat(" head --> ", rb[1,], "\n", "--------", "\n", "tail --> ", rb[2,], "\n") }
That seems to have done nothing with the matrix ... and still breaks with the same error when i
ht(df)
I guess from the errors that there is some problem with cat () here, but I cannot figure out what it is or how to fix it.
Can anybody help?