It's useful when you need to be certain of the mode of a vector. One such situation is when you are about to call a C-language function using the .C() interface. As you point out, some assignments (even just to vector elements) can change the mode of the entire vector. This is why it's important to check the mode of vectors passed to external language functions immediately before the call.

As to what assigning the mode does, it specifies (or changes, if necessary) the underlying type of storage of the vector. In R, all the elements in a vector have the same storage mode. In the example below, the storage is initial as double-precision floats, but after the assignment of character data to element 2, the vector is stored as character data (with suitably coerced values of the other elements). After assignment of list data to element 1, the entire vector becomes a list (i.e., a vector of pointers to general objects). [The terminology I'm using here is a little loose, but someone please correct me if it is outright wrong.] Finally, the assigning of mode "numeric" to the list fails because not all elements can be coerced. (And I'm not sure why the last assignment succeeds and produces the results it does.)

> v <- vector(mode="numeric",length=4)
> v[3:4] <- 3:4
> storage.mode(v)
[1] "double"
> v[2] <- "foo"
> v
[1] "0"   "foo" "3"   "4"
> storage.mode(v)
[1] "character"
>
> v[1] <- list(1:3)
> v
[[1]]
[1] 1 2 3

[[2]]
[1] "foo"

[[3]]
[1] "3"

[[4]]
[1] "4"

> mode(v) <- "numeric"
Error in as.double.default(list(as.integer(c(1, 2, 3)), "foo", "3", "4")) :
        (list) object cannot be coerced to double
> x <- v[2:4]
> mode(x) <- "numeric"
> x
[1] NA NA NA
>

-- Tony Plate

At Friday 03:41 PM 10/29/2004, Joel Bremson wrote:
Hi all,

If I write

v = vector(mode="numeric",length=10)

I'm still allowed to assign non-numerics to v.

Furthermore, R figures out what kind of vector I've got anyway
when I use the mode() function.

So what is it that assigning a mode does?

Joel

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to