Reputation: 2007
I have a list, listDFs
, where each element is a data frame. Each data frame has a different number of rows and the same number of columns.
I should create a vector beginning from listDFs[[i]]$Name extracting all the i element from the list.
I thought to use a loop such:
vComposti <- c()
for(j in 1:10){vComposti <- c(listDFs[[j]]$Name)}
But the result is a vector containing only the first level (listDFs[[1]]$Name) of the list.
Where I wrong?? Do you have any suggestion??
Upvotes: 1
Views: 19873
Reputation: 173517
The problem you have is in this line:
vComposti <- c(listDFs[[j]]$Name)
Each time through your loop, you are re-assigning a new value to vComposti
and overwriting the previous value.
In general it is preferable to pre-allocate the vector and fill it element by element:
vComposti <- rep(NA, 10)
for(j in 1:10){
vComposti[j] <- c(listDFs[[j]]$Name)
}
But it's also not clear to me exactly what you're expecting the result to be. You create a vector, but it looks like you are trying to store an entire data frame column in each element of the vector. If that's the case you may actually be looking for a result that's a list:
vComposti <- vector("list",10)
for(j in 1:10){
vComposti[[j]] <- c(listDFs[[j]]$Name)
}
Another, somewhat more sophisticated, option may be to use lapply
:
lapply(listDFs,FUN = "[","Name")
Upvotes: 6