[R] Strange behaviour of cbind
Marc Schwartz (via MN)
mschwartz at mn.rr.com
Tue Jun 6 22:59:55 CEST 2006
On Tue, 2006-06-06 at 13:44 -0700, Dirk Vandekerckhove wrote:
> Hi,
>
> Is this intended behaviour of cbind?
>
> > a<-c(0,1,2,3)
> > a
> [1] 0 1 2 3
> > a<-as.ordered(a)
> > a
> [1] 0 1 2 3
> Levels: 0 < 1 < 2 < 3
> > a<-a[a!=0] #remove the zero from a
> > a
> [1] 1 2 3
> Levels: 0 < 1 < 2 < 3
> > cbind(a)
> a
> [1,] 2
> [2,] 3
> [3,] 4
>
> #cbind adds +1 to each element
Does this help?
> a
[1] 1 2 3
Levels: 0 < 1 < 2 < 3
> as.integer(a)
[1] 2 3 4
Note in ?cbind, the Details section indicates:
"In the default method, all the vectors/matrices must be atomic (see
vector) or lists (e.g., not expressions)."
For a factor, the atomic data type is the underlying integer vector.
You eliminated '0' from the original ordered factor, which had an
integer value of 1 (not 0!):
> a
[1] 0 1 2 3
Levels: 0 < 1 < 2 < 3
> as.integer(a)
[1] 1 2 3 4
Unless you re-level the factor (as you do below) the other elements
retain the original integer values.
> > a<-as.ordered(as.vector(a))
> > a
> [1] 1 2 3
> Levels: 1 < 2 < 3
> > cbind(a)
> a
> [1,] 1
> [2,] 2
> [3,] 3
>
> #now it works...
Yep, you re-leveled 'a', so the integer values now correspond to the
levels:
> a<-as.ordered(as.vector(a))
> a
[1] 1 2 3
Levels: 1 < 2 < 3
> as.integer(a)
[1] 1 2 3
HTH,
Marc Schwartz
More information about the R-help
mailing list