私は幅のベクトルを持っています、
ws = c(1,1,2,1,3,1)
このベクトルから、次の形式の別のベクトルが必要です。
indexes = c(1,2,3,5,6,7,9,11,12)
このようなベクトルを作成するために、R で次の for ループを実行しました。
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
}
ロジックは次のとおりです。ws の各要素は、index のそれぞれの要素数を指定します。たとえば、ws が 1 の場合、インデックス内のそれぞれの要素数は 1 ですが、ws が > 1 の場合 (3 としましょう)、インデックス内のそれぞれの要素数は 3 であり、要素は 1 つずつスキップされます。 3,5,7に対応。
ただし、R では非常に遅くなる傾向があるため、for ループは避けたいと思います。ベクトル演算のみでそのような結果を達成する方法について何か提案はありますか? またはいくつかのよりクレイジーな解決策はありますか?
ありがとう!