for循环中出错-尝试在integrationIndex中选择少于一个元素

for循环中出错-尝试在integrationIndex中选择少于一个元素,r,c,for-loop,vector,R,C,For Loop,Vector,我正在尝试将一个C例程从一个旧的声音合成程序翻译成R,但是有一些索引问题,我很难理解,当涉及到使用循环时,我是一个初学者 该例程创建一个指数查找表-vector exptab: 运行代码会出现以下错误: Error in exptab[[sinetabsize - i]] <- 1 - (BQ * (exp(BP * x) - 1)) : attempt to select less than one element in integerOneIndex 我从其他帖子中了解到,这表

我正在尝试将一个C例程从一个旧的声音合成程序翻译成R,但是有一些索引问题,我很难理解,当涉及到使用循环时,我是一个初学者

该例程创建一个指数查找表-vector exptab:

运行代码会出现以下错误:

Error in exptab[[sinetabsize - i]] <- 1 - (BQ * (exp(BP * x) - 1)) : 
  attempt to select less than one element in integerOneIndex
我从其他帖子中了解到,这表明存在索引问题。但是,我发现很难解决确切的问题

我怀疑错误可能在我的翻译中。最后几行的原始C代码是:

for (i=1; i < stabsize;i++){
  x += incr;
  exptab[sinetabsize-i] =  1.0 - (float) (BQ*(exp(BP*x) - 1.0));
}
我认为1:stabsize-1中I的R代码与I=1的C代码是等价的;i.尺寸;i++,即i的初始值为i=1,测试i是否
任何关于我错在哪里的建议都将不胜感激

正如您所说,R中的数组索引从1开始。在C中,它从零开始。我想那是你的问题。sinetabsize-i能达到零吗?

正如您所说,R中的数组索引从1开始。在C中,它从零开始。我想那是你的问题。sinetabsize-i能达到零吗?

啊,明白了。exptab数组中的元素数与sinetabsize相同,因此当i=8192时,sinetabsize-i=0。哪里是补偿这一损失的最佳地点?:是的![去过那里,穿了很多次那件t恤…]看起来你从头到尾都在填充exptab。那么简单的exptab[[sinetabsize]]=1-BQ*expBP*x-1就可以了吗?但是您比我更了解您的代码,并且其他变量之间的关系似乎并不明显。试试看。如果有效,请检查它。然后再检查一遍。重复上述步骤,直到感觉舒服为止。你能用较小的初始值'sinetabsize'运行代码吗?不超过10个吧?呵呵,谢谢。很高兴我不是一个人…:sinetabsize是匹配的sine查找表的长度,即匹配指数查找表exptab,因此它必须保持该值。我尝试了一些似乎能正确填充向量的方法,例如,在sinetabsize:1中将for测试更改为I,同时使用exptab[[I]],而不是exptab[[sinetabsize-1]],但这些方法似乎会导致一个无休止的循环,我必须中断R才能停止。你知道为什么吗?啊,明白了。exptab数组中的元素数与sinetabsize相同,因此当i=8192时,sinetabsize-i=0。哪里是补偿这一损失的最佳地点?:是的![去过那里,穿了很多次那件t恤…]看起来你从头到尾都在填充exptab。那么简单的exptab[[sinetabsize]]=1-BQ*expBP*x-1就可以了吗?但是您比我更了解您的代码,并且其他变量之间的关系似乎并不明显。试试看。如果有效,请检查它。然后再检查一遍。重复上述步骤,直到感觉舒服为止。你能用较小的初始值'sinetabsize'运行代码吗?不超过10个吧?呵呵,谢谢。很高兴我不是一个人…:sinetabsize是匹配的sine查找表的长度,即匹配指数查找表exptab,因此它必须保持该值。我尝试了一些似乎能正确填充向量的方法,例如,在sinetabsize:1中将for测试更改为I,同时使用exptab[[I]],而不是exptab[[sinetabsize-1]],但这些方法似乎会导致一个无休止的循环,我必须中断R才能停止。你知道为什么会这样吗?
for (i=1; i < stabsize;i++){
  x += incr;
  exptab[sinetabsize-i] =  1.0 - (float) (BQ*(exp(BP*x) - 1.0));
}