A subset of a data.frame is still a data.frame. A data.frame is actually a list with additional attributes. As far as I know, your solution, "as.matrix", is an appropriate tool to convert a data.frame to a matrix. Caution may be appropropriate, however, because if the data.frame includes anything not numeric, the result may not be numeric, and the result is inconsistent between S-Plus 6.1 and R 1.7.1. Consider the following:

S-PLUS 6.1:

> DF <- data.frame(a = 1:2, b = letters[1:2])
> DF2 <- data.frame(c = TRUE)
> DF3 <- data.frame(c = TRUE, d = 2)
> sapply(DF, class)
        a        b
"integer" "factor"
> as.matrix(DF)
   a   b
1 "1" "a"
2 "2" "b"
> as.matrix(DF2)
 c
1 T
> as.matrix(DF3)
 c d
1 1 2

##################
R 1.7.1:


> DF <- data.frame(a=1:2, b=letters[1:2])
> DF2 <- data.frame(c=TRUE)
> DF3 <- data.frame(c=TRUE, d=2)
> sapply(DF, class)
a b
"integer" "factor"
> as.matrix(DF)
a b 1 "1" "a"
2 "2" "b"
> as.matrix(DF2)
c 1 "TRUE"
> as.matrix(DF3)
c d 1 "TRUE" "2"
#####################
Hope this helps. spencer graves


Ross Boylan wrote:

When assigning a dataframe to a subset of a matrix I got a very odd
result.  Am I missing something, or is this a bug?  Details are below.

Also, if m is defined outside of the current function, is
m[...] <<- foo
necessary to update it, or does regular replacement
m[....] <- foo
work (that is, does it update the "global" rather than creating a
"local" that conceals it)?  I got conflicting results, which were
tangled up with the oddity below.
--------------------------------------------------------

Browse[1]> covs
   epilepsy other.cancer
680        0            0
681        0            0
682        0            0
683        0            1
684        0            0
Browse[1]> m <- matrix(NA, 5,2)
Browse[1]> m[,1:2] <- covs
Browse[1]> m
[[1]]
[1] 0 0 0 0 0

[[2]]
[1] 0 0 0 1 0

[[3]]
[1] 0 0 0 0 0

[[4]]
[1] 0 0 0 1 0

[[5]]
[1] 0 0 0 0 0

[[6]]
[1] 0 0 0 1 0

[[7]]
[1] 0 0 0 0 0

[[8]]
[1] 0 0 0 1 0

[[9]]
[1] 0 0 0 0 0

[[10]]
[1] 0 0 0 1 0

Browse[1]> dim(covs)
[1] 5 2
Browse[1]> class(covs)
[1] "data.frame"
Browse[1]> class(m)
[1] "list"
Browse[1]> length(m)
[1] 10

Fortunately, the following seems to work as expected:
Browse[1]> m[,1:2] <- as.matrix(covs)


Ross Boylan wk: (415) 502-4031 530 Parnassus Avenue (Library) rm 115-4 [EMAIL PROTECTED] Dept of Epidemiology and Biostatistics fax: (415) 476-9856 University of California, San Francisco San Francisco, CA 94143-0840 hm: (415) 550-1062

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help



______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to