ese two expressions not return the same result?
x = list(1, 2, 3, 4); x2 = list(1:4)
A list can contain any other class as each element. So you can have a list where the first element is a character vector, the second is a data frame, etc. In this case, you have created two different lists. x has four vectors, each of length 1. x2 has 1 vector of length 4:
> length(x[[1]])[1]1> length(x2[[1]])[1]4
So these are completely different lists.
R lists are very much like a hash map data structure in that each index value can be associated with any object. Here's a simple example of a list that contains 3 different classes (including a function):
> complicated.list <- list("a"=1:4,"b"=1:3,"c"=matrix(1:4, nrow=2),"d"=search)> lapply(complicated.list, class)$a
[1]"integer"$b
[1]"integer"$c
[1]"matrix"$d
[1]"function"
Given that the last element is the search function, I can call it like so:
> complicated.list[["d"]]()[1]".GlobalEnv"...
As a final comment on this: it should be noted that a data.frame
is really a list (from the data.frame documentation):
A data frame is a list of variables of the same number of rows with unique row names, given class ‘"data.frame"’
That's why columns in a data.frame can have different data types, while columns in a matrix cannot. As an example, here I try to create a matrix with numbers and characters:
> a <-1:4> class(a)[1]"integer"> b <- c("a","b","c","d")> d <- cbind(a, b)> d
a b
[1,]"1""a"[2,]"2""b"[3,]"3""c"[4,]"4""d"> class(d[,1])[1]"character"
Note how I cannot change the data type in the first column to numeric because the second column has characters:
> d[,1]<- as.numeric(d[,1])> class(d[,1])[1]"character"