Types of objects


[Vectors | Factors | Matrices | Arrays | Data Frames | Lists]


There are different types of objects in Splus, such as: vectors, factors, matrices, data frames and lists.

VECTORS

A vector is a string of either numeric, textual, or logical (True/False) characters of any length. For example:
> a2_c(12,14,16)
> a2
[1] 12 14 16
>  a3_c("TX","NY","TN","CA")
> a3
[1] "TX" "NY" "TN" "CA"   
It is possible to name a vector
> heights <- c(160,140,155,170)
> names(heights) <- c("Ned","Jill","Pat","Ronnie")
> heights
 Ned Jill Pat Ronnie
 160  140 155    170
Alternatively, you can do
> people<- c("Ned","Jill","Pat","Ronnie")
> names(heights) <- people
> heights
 Ned Jill Pat Ronnie
 160  140 155    170  
To find the length of a vector do:
>a2_c(12,14,16)
> length(a2)
[1] 3  
We can refer to part of a vector:
> heights
 Ned Jill Pat Ronnie
 160  140 155    170
> heights[3]
 Pat 
>  heights[c(1,3)]
 Ned Pat
 160 155  
> heights[heights < 160]
 Jill Pat
  140 155 
Doing "-" we can designed the part of the vector, we do not want.
> heights[-2]
 Ned Pat Ronnie
 160 155    170 
> heights[-c(1,3)]
 Jill Ronnie
  140    170     
It is possible to change coordinates of a vector:
> a2[3]_5
> a2
[1] 12 14  5   
> a2[c(1,3)]_c(12,15)
> a2
[1] 12 14 15 
> x
[1] -1.7 -1.3 -5.0  0.2  6.0  1.5  2.3  2.7
> x1_replace(x,c(1,3),c(-2,-15))
> x1
[1]  -2.0  -1.3 -15.0   0.2   6.0   1.5   2.3   2.7  
We can apend two vectors in one
> x
[1] -1.7 -1.3 -5.0  0.2  6.0  1.5  2.3  2.7
> y
[1]   12   34    5   12    6    7 2345    2
> x1_append(x,y)
> x1
 [1]    -1.7    -1.3    -5.0     0.2     6.0     1.5     2.3     2.7    12.0
[10]    34.0     5.0    12.0     6.0     7.0  2345.0     2.0   

FACTORS

A factor is a special type of vector used to hold categorical variables. A factor is a character vector with class attribute factor and a levels attribute which determines what character strings may be included in the vector. The function factor creates a factor object out of data and allows one to set the levels attribute. is.factor determines whether a vector is a factor. as.factor coerces a vector into a factor object. The factor consists of a set of codes with attrributes. To get the structure of a factor, we do print.default(). For example,
> states<-factor(c("TX","NY","TN","CA"))
> states
[1] TX NY TN CA
>  print.default(states)
[1] 4 2 3 1
attr(, "levels"):
[1] "CA" "NY" "TN" "TX"
attr(, "class"):
[1] "factor"
> codes(states)
[1] 4 2 3 1   
> is.factor(states) 
[1] T  
>  grades_factor(c("b","a","b","c","c","a"),levels=c("c","b","a"))
> grades
[1] b a b c c a
> print.default(grades)
[1] 2 3 2 1 1 3
attr(, "levels"):
[1] "c" "b" "a"
attr(, "class"):
[1] "factor"
The category objects can be converted to factors by using the command factor(). When a category object is converted to a factor object, the levels attribute becomes the factor labels.

Factors may be created using the factor() function or by converting a character or numeric object using the factor() or as.factor() functions. Factors may also be created by splitting a data object into groups.

We can convert a numeric object to a factor:

> age_c(1,1,2,2,1,3,1,2)

> age_factor(age,labels=c("20-35yrs","35-55yrs","55+yrs"))

> age [1] 20-35yrs 20-35yrs 35-55yrs 35-55yrs 20-35yrs 55+yrs 20-35yrs 35-55yrs

We can convert a character object to a factor using either factor() or as.factor():
> age_c("20-35yrs","20-35yrs","35-55yrs","35-55yrs","20-35yrs","55+yrs")
> age_factor(age)
> age
[1] 20-35yrs 20-35yrs 35-55yrs 35-55yrs 20-35yrs 55+yrs
When a category object is converted to a factor object, the levels attribute becomes the factor labels.

Ordered factors are factors whose levels are taken to be ordered. To create an ordered factor, we can do as follows:

> age_c("20-35yrs","20-35yrs","35-55yrs","35-55yrs","20-35yrs","55+yrs",
"20-35yrs","35-55yrs")+
>  ordered(age)_c("20-35yrs","35-55yrs","55+yrs")
> age
[1] 20-35yrs 20-35yrs 35-55yrs 35-55yrs 20-35yrs 55+yrs   20-35yrs 35-55yrs
 20-35yrs < 35-55yrs < 55+yrs
When a category object is converted to an ordered factor object, the levels attribute is not used as factor labels. In order to keep the label names, the category object must first be converted to a factor object and then to an ordered factor object.

> age_c(22,31,37,52,27,60,34,53)
> age_cut(age,pretty(age))
> age_factor(age)
> age_ordered(age)
> age
[1] 20+ thru 30 30+ thru 40 30+ thru 40 50+ thru 60 20+ thru 30 50+ thru 60
[7] 30+ thru 40 50+ thru 60
    20+ thru 30 < 30+ thru 40 < 50+ thru 60

MATRICES

To create a matrix, you can do:
> a2_c(42, 66, 40, 62, 42, 71, 43, 79, 42, 67)
> kids_matrix(a2,ncol=2,byrow=T)
> kids
     [,1] [,2]
[1,]   42   66
[2,]   40   62
[3,]   42   71
[4,]   43   79
[5,]   42   67 
You also can create matrices binding together vectors. For example,
> a1_c(12,13,15)
> a2_c(14,16,13)
> a3_cbind(a1,a2)
> a4_rbind(a1,a2)
> a3
     a1 a2
[1,] 12 14
[2,] 13 16
[3,] 15 13
> a4
   [,1] [,2] [,3]
a1   12   13   15
a2   14   16   13
We can form a matrix from a vector with given diagonals:
> x
[1] -1.7 -1.3 -5.0  0.2  6.0  1.5  2.3  2.7
> diag(x)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] -1.7  0.0    0  0.0    0  0.0  0.0  0.0
[2,]  0.0 -1.3    0  0.0    0  0.0  0.0  0.0
[3,]  0.0  0.0   -5  0.0    0  0.0  0.0  0.0
[4,]  0.0  0.0    0  0.2    0  0.0  0.0  0.0
[5,]  0.0  0.0    0  0.0    6  0.0  0.0  0.0
[6,]  0.0  0.0    0  0.0    0  1.5  0.0  0.0
[7,]  0.0  0.0    0  0.0    0  0.0  2.3  0.0
[8,]  0.0  0.0    0  0.0    0  0.0  0.0  2.7   
Given a matrix, it is possible to form a matrix with 1in the first column, 2 in the second column and so on.

> a3
      [,1]  [,2]  [,3]  [,4]  [,5]
[1,] 37176 36624 35870 39710 41116
[2,] 36624 36701 35590 40045 41054
[3,] 35870 35590 34713 38691 39894
[4,] 39710 40045 38691 43794 44736
[5,] 41116 41054 39894 44736 45960
> col(a3)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    5
[3,]    1    2    3    4    5
[4,]    1    2    3    4    5
[5,]    1    2    3    4    5
> row(a3)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    2    2    2    2    2
[3,]    3    3    3    3    3
[4,]    4    4    4    4    4
[5,]    5    5    5    5    5   
To name the rows and columns of a matrix, you use "dimnames":
> dimnames(kids)_list(c("Tom","Fred","Sue","Donna","Lee"), 
+ c("Height","Weight"))
> kids
      Height Weight 
  Tom     42     66
 Fred     40     62
  Sue     42     71
Donna     43     79
  Lee     42     67 
If you do not want to name the columns, you can use NULL:
> dimnames(kids)_list(c(NULL),c("Height","Weight"))
> kids
     Height Weight 
[1,]     42     66
[2,]     40     62
[3,]     42     71
[4,]     43     79
[5,]     42     67
You extract an element, a row or a column of a matrix, or any other part,
> a2
     [,1] [,2] [,3] [,4] [,5]
[1,]  371  366  358  397  411
[2,]  366  367  355  400  410
[3,]  358  355  347  386  398
[4,]  397  400  386  437  447
[5,]  411  410  398  447  459
> a2[2,]_c(12,145,15,15,12)
> a2
     [,1] [,2] [,3] [,4] [,5]
[1,]  371  366  358  397  411
[2,]   12  145   15   15   12
[3,]  358  355  347  386  398
[4,]  397  400  386  437  447
[5,]  411  410  398  447  459
> a2[,3]_c(12,11114,12,542,2)
> a2
     [,1] [,2]  [,3] [,4] [,5]
[1,]  371  366    12  397  411
[2,]   12  145 11114   15   12
[3,]  358  355    12  386  398
[4,]  397  400   542  437  447
[5,]  411  410     2  447  459                              

> a2[,c(1,3)]

 371    12
  12 11114
 358    12
 397   542
 411     2  
> a2[,-2]

 371    12 397 411
  12 11114  15  12
 358    12 386 398
 397   542 437 447
 411     2 447 459  
> a2[-2,-3]

 371 366 397 411
 358 355 386 398
 397 400 437 447
 411 410 447 459 


ARRAYS

An array is a data construct that can be though of a multidimentisonal matrix with up to eight dimensions.

For example

> a1_ array(1:24,c(3,4,2))
> a1

, , 1
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

, , 2
     [,1] [,2] [,3] [,4]
[1,]   13   16   19   22
[2,]   14   17   20   23
[3,]   15   18   21   24               
When printing an array, Splus starts with the highest dimension and works toward the lowest dimension, printing two--dimensional matrices at each stage.

It is possible to extract part of array

> a1[,1,]
     [,1] [,2]
[1,]    1   13
[2,]    2   14
[3,]    3   15
> a1[1,,]
     [,1] [,2]
[1,]    1   13
[2,]    4   16
[3,]    7   19
[4,]   10   22  

DATA FRAMES

Data frames allow to bind data vectors of different types together such that the data can be accessed like a matrix. The vectors should have the same length.

For example,

> heights
 Ned Jill Pat Ronnie
 160  140 155    170
> weights_c(220,124,156,146)
> weights
[1] 220 124 156 146
> data.frame(heights,weights)
       heights weights
   Ned     160     220
  Jill     140     124
   Pat     155     156
Ronnie     170     146
> a2_data.frame(heights,weights)
> a2
       heights weights
   Ned     160     220
  Jill     140     124
   Pat     155     156
Ronnie     170     146  
Data frames can be created by using the read.table(), data.frame(), expand.grid(), or the as.data.frame() functions.

LISTS

Lists are a construct that allow you to tie together related data that do not share the same structure. The list funcion works by simply pasting together all the pieces supplied to it.

For example,

> b2
[1] 1 3
> b3
        [,1] [,2]  [,3] [,4]
[1,] "id"    "12" "134" "14"
[2,] "fname" "12" "134" "14"
[3,] "lname" "12" "12"  "14"
[4,] "age"   "12" "12"  "14"
[5,] "junk"  "12" "12"  "14"
[6,] "1"     "2"  "3"   "id"
> b1_list(b2,b3) 
> b1
[[1]]:
[1] 1 3

[[2]]:
        [,1] [,2]  [,3] [,4]
[1,] "id"    "12" "134" "14"
[2,] "fname" "12" "134" "14"
[3,] "lname" "12" "12"  "14"
[4,] "age"   "12" "12"  "14"
[5,] "junk"  "12" "12"  "14"
[6,] "1"     "2"  "3"   "id"
 
We also can given names to a list. For example, the first component of the list is named "one"and the second "two"
   
> b1_list(one=b2,two=b3)
> b1
$one:
[1] 1 3

$two:
        [,1] [,2]  [,3] [,4]
[1,] "id"    "12" "134" "14"
[2,] "fname" "12" "134" "14"
[3,] "lname" "12" "12"  "14"
[4,] "age"   "12" "12"  "14"
[5,] "junk"  "12" "12"  "14"
[6,] "1"     "2"  "3"   "id"  
> names(b1)_c("uno","dos")
> b1
$uno:
[1] 1 3

$dos:
        [,1] [,2]  [,3] [,4]
[1,] "id"    "12" "134" "14"
[2,] "fname" "12" "134" "14"
[3,] "lname" "12" "12"  "14"
[4,] "age"   "12" "12"  "14"
[5,] "junk"  "12" "12"  "14"
[6,] "1"     "2"  "3"   "id" 
The individual components in the list retain their properties as vectors and extra dimension so that the result is a vector as such, individual elements can be extracted from each component in the same way as in any other vector:

> b1[[1]][2]*10
[1] 30 
The components of the list can then be extracted using their names attribute:

> b1$uno
[1] 1 3
> b1[[1]]
[1] 1 3