我有一个宽度向量,
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×1 跳过,对应于 3,5,7。
但是,我想避免 for 循环,因为它们在 R 中往往非常慢。您对如何仅通过矢量操作实现此类结果有任何建议吗?还是一些更疯狂的解决方案?
谢谢!