Tôi có một vector của độ rộng,R chuyển đổi vector của con số để chỉ số bỏ qua
ws = c(1,1,2,1,3,1)
Từ vector này, tôi muốn có một vector của hình thức này:
indexes = c(1,2,3,5,6,7,9,11,12)
Để tạo ra vector như vậy tôi đã làm như sau cho vòng lặp trong R:
ws = c(1,1,2,1,3,1)
indexes = rep(0, sum(ws))
counter = 1
counter2 = 1
last = 0
for(i in 1:length(ws))
{
if (ws[i] == 1)
{
indexes[counter] = counter2
counter = counter + 1
} else {
for(j in 1:ws[i])
{
indexes[counter] = counter2
counter = counter + 1
counter2 = counter2+2
}
counter2 = counter2 - 2
}
counter2 = counter2+1
}
Logic như sau, mỗi phần tử trong ws chỉ định sự tôn trọng số lượng các phần tử trong chỉ mục. Ví dụ, nếu ws là 1, số phần tử tương ứng trong các chỉ mục là 1, nhưng nếu ws là> 1, chúng ta hãy nói 3, số phần tử tương ứng trong chỉ mục là 3 và các phần tử bị bỏ qua 1-by-1, tương ứng với 3,5,7.
Tuy nhiên, tôi muốn tránh các vòng vì chúng có xu hướng rất chậm trong R. Bạn có bất cứ đề xuất nào về cách đạt được kết quả như vậy chỉ với các hoạt động vectơ không? hoặc một số giải pháp crantastic hơn?
Cảm ơn!
đây là siêu cranstastic! :-) cám ơn. – Dnaiel