It is clear, I think, that
is.vector(o, mode = "any")
should be TRUE whenever any of
is.vector(o, mode = "<something>")
is TRUE.
This is not yet the case, however, see below.
Consider the following examples which should be self-explaining.
Besides the above bug, they also show you that -- for S compatibility --
the mode argument should really use strings as returned by 'mode(.)';
Currently it uses strings as returned by 'typeof(.)',
see the definition of mode (written in R) which uses typeof(.) [among others].
[[and I've added the following useful EXAMPLE to the man page of
'mode'
src/library/base/man/mode :
cex3 <-
c("1","1:1","1i","list(1)","args","lm","formals(lm)[[2]]","y~x")
lex3 <- sapply(cex3, function(x) eval(parse(text=x)))
mex3 <- t(sapply(lex3, function(x) c(typeof(x), storage.mode(x),
mode(x))))
dimnames(mex3) <- list(cex3,
c("typeof(.)","mode(.)","storage.mode(.)"))
mex3
]]
## Here is my test code revealing the is.vector(..) problems :
### Ex. 1 --- call ---
cl <- call("lm",y~x)
is.call(cl)# TRUE
mode(cl) # "call" (S & R); #__R: typeof(cl) ==
"language"
is.vector(cl, mode = "any") #R: FALSE, S: TRUE
is.vector(cl, mode = "call") #R: FALSE S: TRUE
is.vector(cl, mode = "language") #R: TRUE S: FALSE
### Ex. 2 --- symbol ---
fo <- formula( y ~ x )
mode(fo) # "call" (S & R) #__R: typeof(fo) ==
"language"
is.call(fo)# TRUE (S & R)
is.name(fo)# FALSE (S & R)
fo1 <- fo[1][[1]]
fo1 # `~'
mode(fo1) # "name" (S & R) #__R: typeof(fo1) ==
"symbol"
is.call(fo1)# FALSE (S & R)
is.name(fo1)# TRUE (S & R)
is.vector(fo1, mode = "any") #R: FALSE, S: TRUE
is.vector(fo1, mode = "name") #R: FALSE, S: TRUE
is.vector(fo1, mode = "symbol") #R: TRUE, S: FALSE
-----
Martin
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To:
r-devel-request@stat.math.ethz.ch
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-