У меня есть несколько списков с похожими именами, такими как «dist124», «dist131» и т. Д. У меня возникла проблема при привязке этих списков/массивов в одном фрейме данных. Мой код выглядит так:Получить максимальную длину нескольких списков
id <- c(124,131,137,198)
# create the dataframe with nrow as an initial size only for test
# and ncols as the max length of my lists
df <- data.frame(matrix(NA, nrow = 4, ncol = 33))
row.names(df) <- id
a = 1
for(i in id){
df[a,] <- do.call(rbind, lapply(paste("dist",i, sep=""), get))
a <- a+1}
Тогда я получаю сообщение об ошибке:
Ошибка в
[<-.data.frame
(*tmp*
, а, ценностные = с (+82,4416264694195, +505,003082621159,: замена имеет 5 пунктов, потребность 33
Я знаю, что это потому, что мои списки имеют разную длину, поэтому, чтобы обойти эту проблему, я решил изменить длину ВСЕХ моих списков сразу (потому что их более 200 списков).
Но я не мог найти решение, чтобы получить максимальную длину этих списков в цикле.
Я нашел решение для списков разной длины здесь:
adding NA to make all list elements equal length
Так я пытался адаптировать его к моему делу, как это:
b <- 1
for(i in id){
assign()
n[b] <- length(paste("dist",i, sep=""))
lapply(paste("dist",i, sep=""), `length<-`, n)
b <- b+1}
Если я бегу длину (dist124) = length (dist198), например, я могу сделать их равными, но я искал решение цикла, так как у меня есть много списков для обновления его длин.
Почему вы хотите интегрировать разные списки в один 'data.frame'? –
Потому что тогда мне нужно сделать некоторые вычисления, а также экспортировать их в уникальный файл. Решение lmo хорошо работало для меня. Спасибо :) –