R создать вектор со структурой цикла - PullRequest
1 голос
/ 20 ноября 2011

У меня есть список, listDFs, где каждый элемент является фреймом данных.Каждый кадр данных имеет различное количество строк и одинаковое количество столбцов.

Я должен создать вектор, начинающийся с listDFs [[i]] $ Name , извлекая все i элемент из списка.

Я думал использовать цикл такой:

vComposti <- c()
for(j in 1:10){vComposti <- c(listDFs[[j]]$Name)}

Но в результате получается вектор, содержащий только первый уровень ( listDFs [[1]] $ Name )из списка.

Где я не прав ??Есть ли у вас какие-либо предложения ??

1 Ответ

6 голосов
/ 20 ноября 2011

Проблема у вас в этой строке:

vComposti <- c(listDFs[[j]]$Name)

Каждый раз в цикле вы повторно присваиваете новое значение для vComposti и перезаписываете предыдущее значение.

Как правило, предпочтительнее предварительно выделить вектор и заполнить его элементом:

vComposti <- rep(NA, 10)
for(j in 1:10){
    vComposti[j] <- c(listDFs[[j]]$Name)
}

Но мне также не совсем понятно, какой результат вы ожидаете получить. Вы создаете вектор, но похоже, что вы пытаетесь сохранить весь столбец фрейма данных в каждом элементе вектора. Если это так, возможно, вы действительно ищете результат, который является списком:

vComposti <- vector("list",10)
for(j in 1:10){
    vComposti[[j]] <- c(listDFs[[j]]$Name)
}

Еще один, более сложный вариант - использовать lapply:

lapply(listDFs,FUN = "[","Name")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...