Riccardo
Riccardo

Reputation: 2007

R create a vector with loop structure

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

Answers (1)

joran
joran

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

Related Questions