У меня есть список векторов, заданный следующим образом:
list_num <- list(c(1,1,1,1,1), c(2,2), c(5), c(3,3,3,3,3))
Я хочу добавить все эти векторы вместе, но сместить каждый вектор на значение его позиции в списке , т.е. при добавлении второго вектора c (2,2) мы добавляем его ко второй позиции и далее к первой. По сути, это выглядело бы следующим образом, где все элементы складываются вместе
list_num <- list(c(1,1,1,1,1), c(0,2,2), c(0,0,5), c(0,0,0,3,3,3,3,3))
# Output:
>> 1 3 8 4 4 3 3 3
Мой текущий подход заключается в создании вектора для размещения добавленных результатов и итерации по каждому элементу для добавления в него:
# Find the length for each of the vectors in the list
list_len <- unlist(lapply(list_num, function(x) { return(length(x))}))
# Find how long will the vector to add the results have to be
list_len <- 1:length(list_num)+list_len
# Generate a vector to house the added results
list_len <- rep(0, max(list_len)-1)
# Then iterate over each of the elements by index i
for(i in 1:length(list_num)){
# Add the vector at position i to the subset of our aggregated vector
list_len[i:(i+length(list_num[[i]])-1)] <- list_len[i:(i+length(list_num[[i]])-1)] + list_num[[i]]
}
print(list_len)
>> 1 3 8 4 4 3 3 3
Но я думаю, что это довольно неэффективно; Я ищу более эффективный способ агрегирования этих векторов go.