Имам няколко списъка с подобни имена, като "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*
, a, , стойност = c(82.4416264694195, 505.003082621159, : замяната има 5 елемента, трябват 33
Знам, че това е така, защото моите списъци имат различна дължина, така че, за да заобиколя този проблем, реших да променя дължината на ВСИЧКИ мои списъци наведнъж (защото те са повече от 200 списъка).
Но не можах да намеря решение, за да вкарам максималната дължина на тези списъци в цикъла.
Намерих решение за списъци с неравни дължини тук:
добавяне на NA, за да направят всички елементи на списъка с еднаква дължина
Така че се опитах да го адаптирам към моя случай, така:
b <- 1
for(i in id){
assign()
n[b] <- length(paste("dist",i, sep=""))
lapply(paste("dist",i, sep=""), `length<-`, n)
b <- b+1}
Ако стартирам length(dist124) = length(dist198), например, мога да ги направя равни, но търсих решение за цикъл, тъй като имам много списъци, за да актуализирам дължините му.
data.frame
? - person R Yoda   schedule 13.02.2017